Text.php 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. <?php
  2. namespace Workerman\Protocols;
  3. use \Workerman\Connection\TcpConnection;
  4. /**
  5. * Text协议
  6. * 以换行为请求结束标记
  7. * @author walkor <walkor@workerman.net>
  8. */
  9. class Text
  10. {
  11. /**
  12. * 检查包的完整性
  13. * 如果能够得到包长,则返回包的长度,否则返回0继续等待数据
  14. * @param string $buffer
  15. */
  16. public static function input($buffer ,TcpConnection $connection)
  17. {
  18. // 由于没有包头,无法预先知道包长,不能无限制的接收数据,
  19. // 所以需要判断当前接收的数据是否超过限定值
  20. if(strlen($buffer)>=TcpConnection::$maxPackageSize)
  21. {
  22. $connection->close();
  23. return 0;
  24. }
  25. // 获得换行字符"\n"位置
  26. $pos = strpos($buffer, "\n");
  27. // 没有换行符,无法得知包长,返回0继续等待数据
  28. if($pos === false)
  29. {
  30. return 0;
  31. }
  32. // 有换行符,返回当前包长,包含换行符
  33. return $pos+1;
  34. }
  35. /**
  36. * 打包,当向客户端发送数据的时候会自动调用
  37. * @param string $buffer
  38. * @return string
  39. */
  40. public static function encode($buffer)
  41. {
  42. // 加上换行
  43. return $buffer."\n";
  44. }
  45. /**
  46. * 解包,当接收到的数据字节数等于input返回的值(大于0的值)自动调用
  47. * 并传递给onMessage回调函数的$data参数
  48. * @param string $buffer
  49. * @return string
  50. */
  51. public static function decode($buffer)
  52. {
  53. // 去掉换行
  54. return trim($buffer);
  55. }
  56. }