Util.php 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. <?php
  2. namespace Easemob\Agora;
  3. /**
  4. * @ignore
  5. * @final
  6. */
  7. final class Util
  8. {
  9. public static function assertEqual($expected, $actual)
  10. {
  11. $debug = debug_backtrace();
  12. $info = "\n- File:" . basename($debug[1]["file"]) . ", Func:" . $debug[1]["function"] . ", Line:" . $debug[1]["line"];
  13. if ($expected != $actual) {
  14. echo $info . "\n Assert failed" . "\n Expected :" . $expected . "\n Actual :" . $actual;
  15. } else {
  16. echo $info . "\n Assert ok";
  17. }
  18. }
  19. public static function packUint16($x)
  20. {
  21. return pack("v", $x);
  22. }
  23. public static function unpackUint16(&$data)
  24. {
  25. $up = unpack("v", substr($data, 0, 2));
  26. $data = substr($data, 2);
  27. return $up[1];
  28. }
  29. public static function packUint32($x)
  30. {
  31. return pack("V", $x);
  32. }
  33. public static function unpackUint32(&$data)
  34. {
  35. $up = unpack("V", substr($data, 0, 4));
  36. $data = substr($data, 4);
  37. return $up[1];
  38. }
  39. public static function packString($str)
  40. {
  41. return self::packUint16(strlen($str)) . $str;
  42. }
  43. public static function unpackString(&$data)
  44. {
  45. $len = self::unpackUint16($data);
  46. $up = unpack("C*", substr($data, 0, $len));
  47. $data = substr($data, $len);
  48. return implode(array_map("chr", $up));
  49. }
  50. public static function packMapUint32($arr)
  51. {
  52. ksort($arr);
  53. $kv = "";
  54. foreach ($arr as $key => $val) {
  55. $kv .= self::packUint16($key) . self::packUint32($val);
  56. }
  57. return self::packUint16(count($arr)) . $kv;
  58. }
  59. public static function unpackMapUint32(&$data)
  60. {
  61. $len = self::unpackUint16($data);
  62. $arr = [];
  63. for ($i = 0; $i < $len; $i++) {
  64. $arr[self::unpackUint16($data)] = self::unpackUint32($data);
  65. }
  66. return $arr;
  67. }
  68. }