online_time = time(); $connection->cityid = $cityid; $connection->station_mac = $mac; $this->connections[$mac] = $connection; //更新到县区的基站信息 $this->city_stations[$cityid][$mac] = 1; } public function remove( $connection ){ //获取连接 $mac = $connection->station_mac; $cityid = $connection->cityid; //从城市基站中移除该基站 unset( $this->city_stations[$cityid][$mac]); //从所有连接中移除连接 unset( $this->connections[$mac]); } public function heartbeat( $connection ){ //添加在所有链接变量 $connection->online_time = time(); $mac = $connection->station_mac; $cityid = $connection->cityid; $this->connections[$mac] = $connection; //更新到县区的基站信息 $this->city_stations[$cityid][$mac] = 1; } public function send_one( $mac, $cmd ){ //检查长连接是否存在 $conn = $this->connections[$mac]; if (!$conn) { log_debug('基站mac不在线:' . $mac); return array('success'=>false, 'message'=>"基站不在线"); } $cmd['mac'] = $conn->station_mac; //发送命令 if (false === $conn->send(json_encode($cmd))) { log_debug('发送命令失败基站mac:' . $mac.json_encode($cmd)); return array('success'=>false, 'message'=>"命令发送失败,基站不在线"); } else { log_debug('发送命令成功基站mac:' . $mac.json_encode($cmd)); return array('success'=>true, 'message'=>"命令发送已成功"); } } public function send_city( $cityid, $cmd ){ //遍历所有基站并发送命令 $stations = array_keys($this->city_stations[$cityid]); if (count($stations) == 0) { log_debug('当前城市的基站是0'); return array('success' => true, 'message' => '当前城市没有在线基站'); } $fails = []; foreach($stations as $mac){ $cmd['mac'] = $mac; $conn = $this->connections[$mac]; if($conn){ $ret = $conn->send(json_encode($cmd)); if ($ret === false){ log_debug('所在城市发送命令失败,基站mac: ' . $mac . json_encode($cmd) ); $fails[] = $mac; } else { log_debug('所在城市发送命令成功,基站mac: ' . $mac . json_encode($cmd) ); } } else{ $fails[] = $mac; log_debug('找不到基站长连接,基站mac: ' . $mac . json_encode($cmd) ); } } if (count($fails) != 0) return array('success'=>false, 'message'=>'发送命令失败的基站mac:' . json_encode($fails)); else return array('success'=>true, 'message'=>'发送命令成功'); } public function send_multi( $macs ){ foreach($macs as $mac){ //检查长连接是否存在 $conn = $this->connections[$mac]; if ($conn) { $cmd['mac'] = $mac; $result = $conn->send(json_encode($cmd)); } else{ log_debug('找不到基站长连接,基站mac: ' . $mac . json_encode($cmd) ); } } return array('success'=>true, 'message'=>"命令发送已成功"); } public function send_all( $cmd ){ $fails = array(); foreach ($this->connections as $conn) { $cmd['msgid'] = $conn->request->msgid; $cmd['mac'] = $conn->request->mac; if (false === $conn->send(json_encode($cmd))) { $fails[] = $conn->request->mac; log_debug('发送升级命令失败基站mac:' . $conn->request->mac); } else { log_debug('发送升级命令成功基站mac:' . json_encode($cmd)); } } return array('success'=>true, 'message'=>"命令发送已成功,失败的为" . json_encode($fails)); } }