/** * 当客户端发来消息时触发 * @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; } }
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"); } }