loraWan915.php 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. <?php
  2. use Workerman\Worker;
  3. require_once __DIR__ . '/Autoloader.php';
  4. require_once './Lib/mysql/src/Connection.php';
  5. use \Workerman\Lib\Timer;
  6. require_once './config.php';
  7. $ws_worker = new Worker("tcp://0.0.0.0:8900");
  8. // 启动1个进程对外提供服务
  9. $ws_worker->count = 1;
  10. $ws_worker->onWorkerStart = function($ws_worker)
  11. {
  12. global $cmdList;
  13. global $resList;
  14. $cmdList = array();
  15. $resList = array();
  16. // 指令返回监测
  17. Timer::add(0.1, function()use($ws_worker){
  18. global $cmdList;
  19. global $resList;
  20. $cmdTemp = $cmdList;
  21. $resTemp = $resList;
  22. if (!empty($resTemp)) {
  23. foreach ($resTemp as $key => $value) {
  24. if (isset($cmdTemp[$value['deviceId']])) {
  25. $cmdTemp[$value['deviceId']]['client']->send('{"res":0,"info":"success","resInfo":"'.$value['resInfo'].'"}');
  26. unset($cmdList[$value['deviceId']]);
  27. }
  28. unset($resList[$key]);
  29. }
  30. }
  31. });
  32. // 超时监测
  33. Timer::add(1, function()use($ws_worker){
  34. global $cmdList;
  35. $cmdTemp = $cmdList;
  36. if (!empty($cmdTemp)) {
  37. foreach ($cmdTemp as $key => $value) {
  38. if (time() - $value['time'] >= 30){
  39. if (isset($value['client'])) {
  40. unset($cmdList[$key]);
  41. }
  42. }
  43. }
  44. }
  45. });
  46. };
  47. $ws_worker->onMessage = function($connection, $data)
  48. {
  49. global $cmdList;
  50. global $resList;
  51. var_dump($data);
  52. $data = json_decode($data,true);
  53. if ($data) {
  54. if ($data['type'] == 'cmd') {
  55. if (isset($data['deviceId']) && !empty($data['deviceId'])) {
  56. $cmdList[$data['deviceId']] = array('client'=>$connection,'time'=>time());
  57. }
  58. }elseif ($data['type'] == 'res'){
  59. if (isset($data['deviceId']) && !empty($data['deviceId'])) {
  60. $resList[$data['deviceId']] = array('deviceId'=>$data['deviceId'],'resInfo'=>isset($data['resInfo']) ? $data['resInfo'] : '');
  61. }
  62. }
  63. }
  64. };
  65. // 运行worker
  66. Worker::runAll();