예제 #1
0
 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");
     }
 }
예제 #2
0
파일: Event.php 프로젝트: xuanchristy/HC-23
 /**
  * 绑定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;
     // }
 }
예제 #3
0
파일: Event.php 프로젝트: xuanchristy/HC-23
 /**
  * 当客户端连接时触发
  * @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();
 }
예제 #4
0
 /**
  * 客户端连接
  * 根据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");
         }
     }
 }
예제 #5
0
파일: Event.php 프로젝트: hongbo819/webChat
 /**
  * 不允许多用户登录
  * 剔除存储用户
  */
 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;
 }
예제 #6
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");
     }
 }