vali 6 éve
szülő
commit
a215690532

+ 102 - 5
vendor/GatewayWorker_windows/Applications/whisper/Events.php

@@ -112,7 +112,6 @@ class Events
             return;
         } else {
             self::DebugOut($message, "OnMessage");
-            self::DebugOut([self::$global->kfList, self::$global->userList, self::$global->uidSimpleList, self::$global->userToKf, $_SESSION['remotip'] . ':' . $_SESSION['remotport']], 'Msg mem: ');
         }
         $message = json_decode($message, true);
         if (isset($message['type'])) {
@@ -207,10 +206,76 @@ class Events
     //客服接入sock,及初始化
     public static function Kfinit($client_id, $message)
     {
+        $uid = self::getPars($message, 'uid');
+        $group = intval(self::getPars($message, 'group', 0));
 
+        if (empty($uid) || empty($group) || !isset(self::$global->groupmap[$group])) {
+            self::MySendMsg($client_id, json_encode(["message_type" => 'checkfalse', 'data' => "客服登陆参数错误"], 256));
+            Gateway::closeCurrentClient();
+            return;
+        }
 
-        // TODO 尝试拉取用户来服务 [二期规划]
+        //客服登陆验证 不符合的直接断掉
+        $kfinfo = self::KfloginCheck($client_id, $message);
+        if (empty($kfinfo)) {
+            self::MySendMsg($client_id, json_encode(["message_type" => 'checkfalse', 'data' => "验证失败"], 256));
+            Gateway::closeCurrentClient();
+            return true;
+        } elseif ($kfinfo['status'] != 1) {
+            self::MySendMsg($client_id, json_encode(["message_type" => 'checkfalse', 'data' => "禁用中..."], 256));
+            Gateway::closeCurrentClient();
+            return true;
+        }
 
+        $loginstate = self::$logic->Kfislogin($client_id, $uid, $group);
+        if ($loginstate == 1) {
+            self::MySendMsg($oldcontid, (json_encode(['message_type' => 'reLoginErr', 'msg' => '正在登陆中,请稍后...'], 256)));
+            Gateway::closeClient($oldcontid);
+            return;
+        }
+
+        if ($loginstate == 2) {
+            $oldcontids = Gateway::getClientIdByUid($uid);
+            Gateway::sendToClient($oldcontids['0'], (json_encode(['message_type' => 'reLoginErr', 'msg' => '你的账号在其它登陆,本次下线'], 256)));
+            Gateway::closeClient($oldcontids['0']);
+            sleep(2);
+        }
+
+        self::$redis->hset('loginTmp:' . $uid, 'uid', time());
+        self::$redis->expire('loginTmp:' . $uid, 5);
+
+        $newinfo =
+            [
+                'id' => 'KF' . $kfinfo['id'],
+                'name' => $kfinfo['user_name'],
+                'job_name' => $kfinfo['user_job_number'],
+                'avatar' => $kfinfo['user_avatar'],
+                'client_id' => $client_id,
+                'task' => 0,
+                'signature' => $kfinfo['signature'],
+                'status' => 2, // 1为在线(接收分配、接收消息)2为隐身(不接收分配、只接收消息)3、休息
+                'user_info' => []
+            ];
+
+        self::$redis->hset('KFINFO', $uid, json_encode($newinfo, 256));
+        $_SESSION['info'] = $newinfo;
+
+        // 绑定 client_id 和 uid
+        Gateway::bindUid($client_id, $message['uid']);
+        $_SESSION['group'] = $message['group'];
+        $_SESSION['iskefu'] = 1;
+        $_SESSION['uid'] = $message['uid'];
+        $_SESSION['name'] = $message['name'];
+        Gateway::joinGroup($client_id, 'group_' . $message['group']);
+
+        $chat_message = [
+            'message_type' => 'loginSuccess',
+        ];
+        self::MySendMsg($client_id, json_encode($chat_message, 256));
+        unset($chat_message);
+        self::writeLogKfStatus($message['uid'], 2);
+
+        return;
     }
 
 
@@ -778,11 +843,43 @@ class Events
     //调试使用
     public static function mydebug($client_id, $message)
     {
-        print_r(self::$redis);
-        $v = self::$redis->hget('test', 't01');
-        echo 'mydebug ' . $v . "\n";
+        $date = self::$db->select('*')->from('ws_service_log')->where('servicelog_id= :id')->bindValues(['id' => 1])->row();
+        self::$redis->hset('SERVICELOG', 1, json_encode($date, 256));
 
     }
 
+    public static function MySendMsg($clientId, $msg)
+    {
+        Gateway::sendToClient($clientId, $msg);
+    }
+
+    //得到客服的UID字符值
+    public static function getkfuid($uid)
+    {
+        if (substr($uid, 0, 2) == 'KF') {
+            return $uid;
+        } else {
+            return 'KF' . intval($uid);
+        }
+    }
+
+    //得到客服的ID整数值
+    public static function getkfid($id)
+    {
+        if ($id == intval($id)) {
+            return $id;
+        } else {
+            return intval(substr($id, 2));
+        }
+    }
+
+    public static function getPars($array, $key, $default = '')
+    {
+        if (isset($array[$key])) {
+            return $array[$key];
+        }
+        return $default;
+    }
 
 }
+

+ 16 - 0
vendor/GatewayWorker_windows/Applications/whisper/Mlogic.php

@@ -109,5 +109,21 @@ class Mlogic
         Gateway::sendToClient($clientId, $msg);
     }
 
+    //客服是否正在登陆,或已经登陆 0未登陆   1正在登陆  2已登陆成功
+    public static function Kfislogin($client_id, $kfuid, $groupid)
+    {
+        $hakey = self::$redis->hget("loginTmp:" . $kfuid, $kfuid);
+        if ($hakey) {
+            return 1;
+        }
+
+        $cids = Gateway::getClientIdByUid($kfuid);
+        if (count($cids) > 0) {
+            return 2;
+        }
+
+        return 0;
+    }
+
 
 }