|
@@ -138,48 +138,7 @@ class Events
|
|
|
switch ($message['type']) {
|
|
switch ($message['type']) {
|
|
|
// 客服初始化
|
|
// 客服初始化
|
|
|
case 'init':
|
|
case 'init':
|
|
|
- $kfList = self::$global->kfList;
|
|
|
|
|
-
|
|
|
|
|
- //客服登陆验证 不符合的直接断掉
|
|
|
|
|
- $logcheck = true ; //开发时使用
|
|
|
|
|
- //$logcheck = self::KfloginChedk($client_id, $message);
|
|
|
|
|
- if (!$logcheck) {
|
|
|
|
|
- Gateway::closeCurrentClient();
|
|
|
|
|
- return true;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- // 如果该客服未在内存中记录则记录
|
|
|
|
|
- if (!isset($kfList[$message['group']]) || !array_key_exists($message['uid'], $kfList[$message['group']])) {
|
|
|
|
|
-
|
|
|
|
|
- do {
|
|
|
|
|
- $newKfList = $kfList;
|
|
|
|
|
- $newKfList[$message['group']][$message['uid']] = [
|
|
|
|
|
- 'id' => $message['uid'],
|
|
|
|
|
- 'name' => $message['name'],
|
|
|
|
|
- 'avatar' => $message['avatar'],
|
|
|
|
|
- 'client_id' => $client_id,
|
|
|
|
|
- 'task' => 0,
|
|
|
|
|
- 'user_info' => []
|
|
|
|
|
- ];
|
|
|
|
|
- } while (!self::$global->cas('kfList', $kfList, $newKfList));
|
|
|
|
|
- unset($newKfList, $kfList);
|
|
|
|
|
- } else if (isset($kfList[$message['group']][$message['uid']])) {
|
|
|
|
|
-
|
|
|
|
|
- do {
|
|
|
|
|
- $newKfList = $kfList;
|
|
|
|
|
- $newKfList[$message['group']][$message['uid']]['client_id'] = $client_id;
|
|
|
|
|
- } while (!self::$global->cas('kfList', $kfList, $newKfList));
|
|
|
|
|
- unset($newKfList, $kfList);
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- // 绑定 client_id 和 uid
|
|
|
|
|
- Gateway::bindUid($client_id, $message['uid']);
|
|
|
|
|
- $_SESSION['group'] = $message['group'];
|
|
|
|
|
- $_SESSION['iskefu'] = 1;
|
|
|
|
|
- $_SESSION['uid'] = $message['uid'];
|
|
|
|
|
-
|
|
|
|
|
- // TODO 尝试拉取用户来服务 [二期规划]
|
|
|
|
|
-
|
|
|
|
|
|
|
+ self::Kfinit($client_id, $message);
|
|
|
break;
|
|
break;
|
|
|
// 顾客初始化
|
|
// 顾客初始化
|
|
|
case 'userInit';
|
|
case 'userInit';
|
|
@@ -334,6 +293,52 @@ class Events
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ //客服接入sock,及初始化
|
|
|
|
|
+ public static function Kfinit($client_id, $message){
|
|
|
|
|
+ $kfList = self::$global->kfList;
|
|
|
|
|
+
|
|
|
|
|
+ //客服登陆验证 不符合的直接断掉
|
|
|
|
|
+ $logcheck = true ; //开发时使用
|
|
|
|
|
+ //$logcheck = self::KfloginChedk($client_id, $message);
|
|
|
|
|
+ if (!$logcheck) {
|
|
|
|
|
+ Gateway::closeCurrentClient();
|
|
|
|
|
+ return true;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 如果该客服未在内存中记录则记录
|
|
|
|
|
+ if (!isset($kfList[$message['group']]) || !array_key_exists($message['uid'], $kfList[$message['group']])) {
|
|
|
|
|
+
|
|
|
|
|
+ do {
|
|
|
|
|
+ $newKfList = $kfList;
|
|
|
|
|
+ $newKfList[$message['group']][$message['uid']] = [
|
|
|
|
|
+ 'id' => $message['uid'],
|
|
|
|
|
+ 'name' => $message['name'],
|
|
|
|
|
+ 'avatar' => $message['avatar'],
|
|
|
|
|
+ 'client_id' => $client_id,
|
|
|
|
|
+ 'task' => 0,
|
|
|
|
|
+ 'user_info' => []
|
|
|
|
|
+ ];
|
|
|
|
|
+ } while (!self::$global->cas('kfList', $kfList, $newKfList));
|
|
|
|
|
+ unset($newKfList, $kfList);
|
|
|
|
|
+ } else if (isset($kfList[$message['group']][$message['uid']])) {
|
|
|
|
|
+
|
|
|
|
|
+ do {
|
|
|
|
|
+ $newKfList = $kfList;
|
|
|
|
|
+ $newKfList[$message['group']][$message['uid']]['client_id'] = $client_id;
|
|
|
|
|
+ } while (!self::$global->cas('kfList', $kfList, $newKfList));
|
|
|
|
|
+ unset($newKfList, $kfList);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 绑定 client_id 和 uid
|
|
|
|
|
+ Gateway::bindUid($client_id, $message['uid']);
|
|
|
|
|
+ $_SESSION['group'] = $message['group'];
|
|
|
|
|
+ $_SESSION['iskefu'] = 1;
|
|
|
|
|
+ $_SESSION['uid'] = $message['uid'];
|
|
|
|
|
+
|
|
|
|
|
+ // TODO 尝试拉取用户来服务 [二期规划]
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
//客服登陆验证
|
|
//客服登陆验证
|
|
|
public static function KfloginChedk($client, $messageArray)
|
|
public static function KfloginChedk($client, $messageArray)
|
|
|
{
|
|
{
|
|
@@ -347,7 +352,8 @@ class Events
|
|
|
$kfid = intval(substr($uid, 2));
|
|
$kfid = intval(substr($uid, 2));
|
|
|
$ret = self::$db->select('*')->from('ws_users')->where('id= :id and token=:token and expire_time>=:expire_time')->bindValues(array('id' => $kfid, 'token' => $token, 'expire_time' => $expire_time_vali))->row();
|
|
$ret = self::$db->select('*')->from('ws_users')->where('id= :id and token=:token and expire_time>=:expire_time')->bindValues(array('id' => $kfid, 'token' => $token, 'expire_time' => $expire_time_vali))->row();
|
|
|
if ($ret) {
|
|
if ($ret) {
|
|
|
- return true;
|
|
|
|
|
|
|
+ self::$db->update('ws_users')->cols(array('online_status'=>1,'online_connectid'=>$client))->where('id='.$kfid)->query();
|
|
|
|
|
+ return $ret;
|
|
|
}
|
|
}
|
|
|
return false;
|
|
return false;
|
|
|
}
|
|
}
|
|
@@ -465,6 +471,10 @@ class Events
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
unset($kefuinfo_old_new[$group][$uid]);
|
|
unset($kefuinfo_old_new[$group][$uid]);
|
|
|
|
|
+
|
|
|
|
|
+ $kfid = intval(substr($uid,2));
|
|
|
|
|
+ self::$db->update('ws_users')->cols(array('online_status'=>0,'online_connectid'=>''))->where('id='.$kfid)->query();
|
|
|
|
|
+
|
|
|
do {
|
|
do {
|
|
|
} while (!self::$global->cas('kfList', $kefuinfo_old, $kefuinfo_old_new));
|
|
} while (!self::$global->cas('kfList', $kefuinfo_old, $kefuinfo_old_new));
|
|
|
return;
|
|
return;
|