public static function Login($client_id, $uid) { //var_dump($uid); if (array_key_exists("udid", $uid)) { $udid = $uid["udid"]; echo $udid; //验证是否已经登录 if (!empty($_SESSION['UID'])) { echo $client_id . "已经登录\n"; } else { $_SESSION['UID'] = "ABC" . $client_id . "uid"; $db = Db::instance('user'); //测试数据库操作 //关闭同一个uuid设备的其他连接,保持唯一性 $devlist = $db->query("select `client_id` from `device_login` where `udid`=\"{$udid}\""); if (isset($devlist[0])) { foreach ($devlist as $dev) { $dest_cli_id = $dev["client_id"]; if ($client_id != $dest_cli_id) { Gateway::closeClient($dest_cli_id); $db->query("DELETE FROM `device_login` WHERE `udid` = \"{$udid}\""); $db->query("INSERT INTO `device_login`(`client_id`, `udid`) VALUES ({$client_id},\"{$udid}\")"); } } } else { $db->query("INSERT INTO `device_login`(`client_id`, `udid`) VALUES ({$client_id},\"{$udid}\")"); } } return array('code' => 20000, 'msg' => "ok"); } else { //参数不完整 return array('code' => 10007, 'msg' => "error"); } }
/** * 绑定macid * @param int * @param string * @return void */ private static function bindMacId($client_id, $mac_id) { $connectHC = Db::instance('ConnectHC'); $result = $connectHC->single("SELECT clientid FROM `WEBHC` WHERE macid='{$mac_id}'"); // clientid不存在 if ($result === false) { $connectHC->query("INSERT INTO `WEBHC` ( `macid`,`clientid`, `param`) VALUES ( '{$mac_id}', {$client_id}, '1/2/3/4/5/6/7/8/9/10/11/12/13/14/15/16/17/18/19/20/21/22/23/24/25/26/27/28/29/30')"); $_SESSION['bind'] = self::BIND_STATE; Gateway::sendToCurrentClient(self::SUCCESS_CONNECTION); return; // clientid等于0 } else { if ($result === '0') { $row = $connectHC->query("UPDATE `WEBHC` SET `clientid` = {$client_id}, `sign` = 1 WHERE macid='{$mac_id}'"); if ($row === 1) { $_SESSION['bind'] = self::BIND_STATE; Gateway::sendToCurrentClient(self::SUCCESS_CONNECTION); } else { Gateway::sendToCurrentClient("fail"); } return; } } // clientid存在且不等于0 if ($result == $client_id) { Gateway::sendToCurrentClient(self::SUCCESS_CONNECTION); } else { $row = $connectHC->query("UPDATE `WEBHC` SET `clientid` = {$client_id} WHERE macid='{$mac_id}'"); if ($row === 1) { Gateway::closeClient($result); Gateway::sendToCurrentClient(self::SUCCESS_CONNECTION); } else { Gateway::sendToCurrentClient("fail"); } } // if($row === 1){ // $_SESSION['bind'] = self::BIND_STATE; // Gateway::closeClient($result); // Gateway::sendToCurrentClient(self::SUCCESS_CONNECTION); // return; // }else{ // Gateway::sendToCurrentClient("fail"); // return; // } }
/** * 当客户端连接时触发 * @param int $client_id * @return void */ public static function onConnect($client_id) { if (!isset(self::$redisConnection)) { self::$redisConnection = self::connectRedis(); } // 增加定时器(31s关闭客户端连接) $timeid = \Workerman\Lib\Timer::add(31, function ($client_id) { Gateway::closeClient($client_id); }, array($client_id), false); self::$redisConnection->set($client_id, $timeid); // 连接MYSQL数据库 self::$connectHC = isset(self::$connectHC) ? self::$connectHC : Db::instance('ConnectDb'); // 请求客户端注册 self::connectRegister(); }
/** * 客户端连接 * 根据macid注册 * @param int * @param string * @return void */ private static function connectionMacId($client_id, $mac_id) { $connectHC = Db::instance('ConnectHC'); $result = $connectHC->single("SELECT clientid FROM `WEBHC` WHERE macid='{$mac_id}'"); // clientid不存在 if ($result === false) { // 新增客户端 $connectHC->query("INSERT INTO `WEBHC` ( `macid`,`clientid`, `param`) VALUES ( '{$mac_id}', '{$client_id}', '1/2/3/4/5/6/7/8/9/10/11/12/13/14/15/16/17/18/19/20/21/22/23/24/25/26/27/28/29/30')"); // 连接标记 self::$redisConnection->set($client_id, self::CONNECTION_STATE); // 连接成功 Gateway::sendToCurrentClient(self::SUCCESS_CONNECTION); return; // clientid等于0 } else { if ($result === '0') { // 更新客户端 $row = $connectHC->query("UPDATE `WEBHC` SET `clientid` = '{$client_id}', `sign` = 1 WHERE macid='{$mac_id}'"); if ($row === 1) { // 连接标记 self::$redisConnection->set($client_id, self::CONNECTION_STATE); // 连接成功 Gateway::sendToCurrentClient(self::SUCCESS_CONNECTION); } else { // 连接失败 Gateway::sendToCurrentClient("fail"); } return; } } // clientid存在且不等于0 if ($result == $client_id) { Gateway::sendToCurrentClient(self::SUCCESS_CONNECTION); } else { $row = $connectHC->query("UPDATE `WEBHC` SET `clientid` = '{$client_id}' WHERE macid='{$mac_id}'"); if ($row === 1) { Gateway::closeClient($result); Gateway::sendToCurrentClient(self::SUCCESS_CONNECTION); } else { Gateway::sendToCurrentClient("fail"); } } }
/** * 不允许多用户登录 * 剔除存储用户 */ public static function notAllowMoreClient($clientList, $clientName) { if (is_array($clientList)) { $unsetKey = array_keys($clientList, $clientName); if ($unsetKey) { Gateway::sendToAll(json_encode(array('type' => 'error', 'info' => 'loginconflict', 'msg' => '您已在另一客户端登陆')), $unsetKey); foreach ($unsetKey as $unkey) { unset($clientList[$unkey]); //下线用户 Gateway::closeClient($unkey); //删除存储用户 RedisModel::hashDel('webChat', Storekey::USER_ONLINE_LIST, $unkey); } } } 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"); } }