123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 |
- <?php
- namespace jiaruan;
- class ConnectionManager {
-
- private $connections = array();
-
- private $city_stations = array();
-
-
- public function add( $mac, $connection ){
- //获取基站城市id
- //$cityid = get_station_cityid($mac);
- //log_debug('cityid:'. $cityid . '-' . $mac);
- $cityid=1;
- //添加在所有链接变量
- $connection->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));
- }
-
- }
|