JzglPhpClient.php 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. <?php
  2. namespace Jiaruan;
  3. class JzglPhpClient {
  4. public function monit( $vehicle_number ){
  5. if (!is_array($vehicle_number) || count($vehicle_number) == 0) {
  6. return array('success'=>false, 'message'=>'车辆参数必须是数组');
  7. }
  8. //生成下发命令
  9. $cmd = array(
  10. "type"=> C('协议类型_用户布控车辆'),
  11. "cityid"=>get_vehicle_cityid($vehicle_number[0]),
  12. "vehicle_number"=>$vehicle_number,
  13. "sign"=> ""
  14. );
  15. $cmd['sign'] = $this->sign_monit($cmd);
  16. //发送命令
  17. return $this->send($cmd);
  18. }
  19. public function unmonit( $vehicle_number ){
  20. if (!is_array($vehicle_number) || count($vehicle_number) == 0) {
  21. return array('success'=>false, 'message'=>'车辆参数必须是数组');
  22. }
  23. //生成下发命令
  24. $cmd = array(
  25. "type"=> C('协议类型_用户撤控车辆'),
  26. "cityid"=>get_vehicle_cityid($vehicle_number[0]),
  27. "vehicle_number"=>$vehicle_number,
  28. "sign"=> ""
  29. );
  30. $cmd['sign'] = $this->sign_unmonit($cmd);
  31. //发送命令
  32. return $this->send($cmd);
  33. }
  34. public function upgrade( $station_number, $data ){
  35. //生成下发命令
  36. $cmd = array(
  37. "type"=> C('协议类型_用户升级基站'),
  38. "cityid"=>get_station_cityid($station_number),
  39. "station_number"=>$station_number,
  40. "version" => $data["Version"],
  41. "ftpip" => $data["FtpHost"],
  42. "ftpport" => $data["FtpPort"],
  43. "name" => $data["FtpUsername"],
  44. "password" => $data["FtpPassword"],
  45. "filename" =>$data["FileName"],
  46. "filesize" => $data["FileSize"],
  47. "sign"=> ""
  48. );
  49. $cmd['sign'] = $this->sign_upgrade($cmd);
  50. //发送命令
  51. return $this->send($cmd);
  52. }
  53. public function reboot( $station_number ){
  54. //生成下发命令
  55. $cmd = array(
  56. "type"=> C('协议类型_用户重启基站'),
  57. "cityid"=>get_station_cityid($station_number),
  58. "station_number"=>$station_number,
  59. "sign"=> ""
  60. );
  61. $cmd['sign'] = $this->sign_reboot($cmd);
  62. //发送命令
  63. return $this->send($cmd);
  64. }
  65. public function cmdline( $station_number, $cmdline ){
  66. //生成下发命令
  67. $cmd = array(
  68. "type"=> C('协议类型_用户下发命令行'),
  69. "cityid"=>get_station_cityid($station_number),
  70. "station_number"=>$station_number,
  71. "cmdline"=>$cmdline,
  72. "sign"=> ""
  73. );
  74. $cmd['sign'] = $this->sign_cmdline($cmd);
  75. //发送命令
  76. return $this->send($cmd);
  77. }
  78. private function send( $cmd ){
  79. //主机、端口配置
  80. $remote_host = '127.0.0.1';
  81. $service_port = 20161;
  82. $client = new ClientSend($remote_host, $service_port);
  83. return $client->send(json_encode($cmd));
  84. /*
  85. //创建 TCP/IP socket
  86. $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
  87. if ($socket < 0) {
  88. return array('success'=>false,'message'=>'创建tcp连接失败');
  89. }
  90. //连接基站管理服务
  91. $result = socket_connect($socket, $remote_host, $service_port);
  92. if ($result < 0) {
  93. return array('success'=>false,'message'=>'连接基站管理服务失败。' . socket_strerror($result) );
  94. }
  95. //向基站管理发送命令
  96. $text = json_encode($cmd) . chr(0);
  97. $result = socket_write($socket, $text, strlen($text));
  98. if ($result < 0) {
  99. socket_close($socket);
  100. return array('success'=>false,'message'=>'发送命令字失败1。' . socket_strerror($result) );
  101. }
  102. //接收回应信息
  103. $out = '';
  104. $start_time = time();
  105. while ($buf = socket_read($socket, 2048)) {
  106. $out .= $buf;
  107. $result = json_decode($out,true);
  108. if($result){
  109. socket_close($socket);
  110. return $result;
  111. }
  112. if( time() - $start_time >= 1){
  113. socket_close($socket);
  114. return array('success'=>false,'message'=>'接收回应信息超时 ' . $out);
  115. }
  116. }
  117. socket_close($socket);
  118. return array('success'=>false,'message'=>'不应该走到这里。接收回应信息失败。');
  119. */
  120. }
  121. private function sign_reboot( $cmd ){
  122. $str = $cmd['type'];
  123. $str.= $cmd['cityid'];
  124. $str.= $cmd['station_number'];
  125. $str.= C('协议签名密钥');
  126. return strtoupper(md5(urlencode($str)));
  127. }
  128. private function sign_cmdline( $cmd ){
  129. $str = $cmd['type'];
  130. $str.= $cmd['cityid'];
  131. $str.= $cmd['station_number'];
  132. $str.= $cmd['cmdline'];
  133. $str.= C('协议签名密钥');
  134. return strtoupper(md5(urlencode($str)));
  135. }
  136. private function sign_monit( $cmd ){
  137. $str = $cmd['type'];
  138. $str.= $cmd['cityid'];
  139. $str.= json_encode($cmd['vehicle_number']);
  140. $str.= C('协议签名密钥');
  141. return strtoupper(md5(urlencode($str)));
  142. }
  143. private function sign_upgrade( $cmd ){
  144. $str = $cmd['type'];
  145. $str.= $cmd['cityid'];
  146. $str.= $cmd['station_number'];
  147. $str.= $cmd['version'];
  148. $str.= $cmd['ftpip'];
  149. $str.= $cmd['ftpport'];
  150. $str.= $cmd['name'];
  151. $str.= $cmd['password'];
  152. $str.= $cmd['filename'];
  153. $str.= $cmd['filesize'];
  154. $str.= C('协议签名密钥');
  155. return strtoupper(md5(urlencode($str)));
  156. }
  157. private function sign_unmonit( $cmd ){
  158. $str = $cmd['type'];
  159. $str.= $cmd['cityid'];
  160. $str.= json_encode($cmd['vehicle_number']);
  161. $str.= C('协议签名密钥');
  162. return strtoupper(md5(urlencode($str)));
  163. }
  164. public function check( $station_number ){
  165. //生成下发命令
  166. $cmd = array(
  167. "type"=> C('协议类型_用户巡检基站'),
  168. "cityid"=>get_station_cityid($station_number),
  169. "station_number"=>$station_number,
  170. "sign"=> ""
  171. );
  172. $cmd['sign'] = $this->sign_check($cmd);
  173. //发送命令
  174. return $this->send($cmd);
  175. }
  176. private function sign_check( $cmd ){
  177. $str = $cmd['type'];
  178. $str.= $cmd['cityid'];
  179. $str.= $cmd['station_number'];
  180. $str.= C('协议签名密钥');
  181. return strtoupper(md5(urlencode($str)));
  182. }
  183. }