예제 #1
0
파일: Event.php 프로젝트: xuanchristy/HC-23
 /**
  * 当客户端发来消息时触发
  * @param  int $client_id
  * @param  string $message
  * @return void
  */
 public static function onMessage($client_id, $message)
 {
     // 得到协议版本
     $wifiversion = substr($message, 4, 2);
     // 得到消息中的目的源地址
     $targetaddr = substr($message, 8, 12);
     // 得到消息中的数据源地址
     $startaddr = substr($message, 20, 12);
     // 得到数据类型
     $messageClass = substr($message, 33, 1);
     // 得到心跳包类型
     $onlinedata = substr($message, 35, 1);
     // var_dump($client_id.'--0--'.bin2hex($message));
     // 判断心跳包
     if ($onlinedata === "�" && isset($_SESSION['registflag'])) {
         // 收到心跳包重新定时
         self::updateTimeid($client_id);
         return;
     }
     // 注册成功返回信息 && 发送失败返回信息
     if (!isset($_SESSION["registsuccess"]) && !isset($_SESSION["transerror"])) {
         $_SESSION["registsuccess"] = "++HC*" . $startaddr . Protocol::$V1['DEFALUT_SMAC'] . Protocol::$V1['SERVER_MODEL'] . "" . Protocol::$V1['STATUS_CONNECTED'] . "�HC\r\n";
         $_SESSION["transerror"] = "++HC*" . $startaddr . Protocol::$V1['DEFALUT_SMAC'] . Protocol::$V1['SERVER_MODEL'] . "" . Protocol::$V1['STATUS_DISONLINE'] . "�HC\r\n";
     }
     // 客户端之间通讯
     if ($wifiversion === "" && $targetaddr !== Protocol::$V1['DEFALUT_SMAC']) {
         // 判断$_SESSION缓存中客户端client_id是否在线
         if (isset($_SESSION["{$targetaddr}"]) && Gateway::isOnline($_SESSION["{$targetaddr}"])) {
             // if($messageClass === "\x02"){
             // 	// 记录控制次数
             // 	self::$connectHC->query("UPDATE `HC` SET `control` = `control`+1 WHERE macid='$startaddr'");
             // }
             // var_dump($_SESSION["$targetaddr"].'--1--'.bin2hex($message));
             Gateway::sendToClient($_SESSION["{$targetaddr}"], $message);
             return;
         }
         // 得到目的客户端client_id
         $targetaddrclientid = self::$connectHC->single("SELECT clientid FROM `HC` WHERE macid='{$targetaddr}'");
         // 如果目的客户端在线则转发
         if (Gateway::isOnline($targetaddrclientid)) {
             // 写入$_SESSION缓存
             $_SESSION["{$targetaddr}"] = intval($targetaddrclientid);
             // if($messageClass === "\x02"){
             // 	// 记录控制次数
             // 	self::$connectHC->query("UPDATE `HC` SET `control` = `control`+1 WHERE macid='$startaddr'");
             // }
             // var_dump($_SESSION["$targetaddr"].'--'.bin2hex($message));
             Gateway::sendToClient($targetaddrclientid, $message);
             return;
         }
         // 目的客户端不在线则回复
         Gateway::sendToCurrentClient($_SESSION["transerror"]);
         return;
     }
     // 客户端注册
     if ($targetaddr === Protocol::$V1['DEFALUT_SMAC']) {
         // 重复注册
         if (isset($_SESSION['registflag']) && $_SESSION['registflag'] === 1) {
             // 心跳包更新
             self::updateTimeid($client_id);
             // 注册成功
             Gateway::sendToCurrentClient($_SESSION["registsuccess"]);
             return;
         }
         // 判断客户端是否存在
         $selectclientid = self::$connectHC->single("SELECT clientid FROM `HC` WHERE macid='{$startaddr}'");
         if ($selectclientid === "0") {
             // 更新MYSQL数据库
             self::$connectHC->query("UPDATE `HC` SET `clientid` = {$client_id}, `lastintime` = CURRENT_TIMESTAMP() WHERE macid='{$startaddr}'");
             $_SESSION['registflag'] = 1;
             // 心跳包更新
             self::updateTimeid($client_id);
             // 注册成功
             Gateway::sendToCurrentClient($_SESSION["registsuccess"]);
             return;
         }
         if ($selectclientid === false) {
             // 插入MYSQL数据库
             self::$connectHC->query("INSERT INTO `HC` ( `macid`,`clientid`,`lastintime`) VALUES ('{$startaddr}', '{$client_id}',CURRENT_TIMESTAMP())");
             $_SESSION['registflag'] = 1;
             // 心跳包更新
             self::updateTimeid($client_id);
             // 注册成功
             Gateway::sendToCurrentClient($_SESSION["registsuccess"]);
             return;
         }
         // 更新MYSQL数据库
         self::$connectHC->query("UPDATE `HC` SET `clientid` = {$client_id}, `lastintime` = CURRENT_TIMESTAMP() WHERE macid='{$startaddr}'");
         $_SESSION['registflag'] = 1;
         // 心跳包更新
         self::updateTimeid($client_id);
         // 注册成功
         Gateway::sendToCurrentClient($_SESSION["registsuccess"]);
         return;
     }
 }
예제 #2
0
 public static function manageDevice($client_id, $uid)
 {
     //var_dump($uid);
     if (array_key_exists("udid", $uid) && array_key_exists("msg", $uid) && array_key_exists("uuid", $uid) && array_key_exists("tdid", $uid) && array_key_exists("synckey", $uid)) {
         $udid = $uid["udid"];
         $uuid = $uid["uuid"];
         $tdid = $uid["tdid"];
         $msg = $uid["msg"];
         $synckey = $uid["synckey"];
         $db = Db::instance('user');
         //测试数据库操作
         //$user = $db->query("select user from user where uuid='$uuid'");
         //if(!isset($user[0]))
         //{ //uuid无效
         //return array("code"=>11004, "msg"=>"username error");
         //}
         $db->query("INSERT INTO `device_login`(`client_id`, `uuid`, `synckey`) VALUES ({$client_id},\"{$uuid}\",\"{$synckey}\")");
         $devlist = $db->query("select `client_id` from `device_login` where `udid`=\"{$udid}\"");
         if (!isset($devlist[0])) {
             //主机没有登录
             return array("code" => 20001, "msg" => "device no login");
         } else {
             $cli_id = $devlist[0]["client_id"];
             if (Gateway::isOnline($cli_id)) {
                 Gateway::sendToClient($cli_id, array('method' => "manage", 'params' => array('tdid' => $tdid, 'src' => "server", 'from' => $uuid, 'synckey' => $synckey, 'msg' => $msg)));
             } else {
                 //主机离线
                 Gateway::closeClient($cli_id);
                 return array("code" => 20002, "msg" => "device offline");
             }
         }
         //发送成功
         return array("code" => 0, "msg" => "ok");
     } else {
         //命令参数不完整
         return array("code" => 10007, "msg" => "params error");
     }
 }