401, 'error' => '请登录系统!'] ; //发送消息 public function sendMessage($server ,$client_id ,$data) { //检查登录 $user_id = $this->checkLogin($server ,$client_id ,$data); if(!$user_id){ return $this->sendLogin($server , $client_id ) ; } $uniacid = $data['data']['uniacid']; $target_id = $data['data']['target_id']; //接收消息用户id $content = $data['data']['content']; if( isset($data['data']['id']) && $data['data']['id'] > 0 ) { // $message = $data['data'] ; $message_type = $data['data']['message_type']; }else{ $chat_id = ImService::getChatId($uniacid, $user_id, $target_id); $message_type = $data['data']['type']; $message['message_type'] = $message_type; // $message['status'] = 1; //消息状态 1=>未读消息 2=>已读 3=>已撤销 4=>已删除 $message['user_id'] = $user_id; //发送消息用户id $message['target_id'] = $target_id; //接收消息用户id $message['content'] = $content; // 消息内容 $message['uniacid'] = $uniacid; //平台ID $message['chat_id'] = $chat_id; // 房间ID $message['create_time'] = time(); $message['update_time'] = time(); ImService::addMessage($message); } $pushTargetClientId = intval( $this->getClientIdByUserId($target_id) ) ; //客户在线 if($pushTargetClientId){ $this->sendServerMsg($server , $pushTargetClientId , 'getNewMessage' ,true,'', $message ); $this->getUnReadMessageCount($server , $pushTargetClientId , ['data'=>['user_id' => $target_id ] ] ); $this->getCustomerUnReadMessageCount($server , $pushTargetClientId , ['data'=>['user_id' => $target_id ,'target_id' => $user_id ] ] ); }else{ //发送服务通知给客户 //员工姓名,必须为中文,不能带有数字和符号 //$name = LongbingUserInfoService::getNameByUserId($user_id); //ImService::sendTmplMsg($uniacid,$target_id,[ $name , '有未读私信' , LongbingTime::getChinaNowTime()] , 'pages/user/home' ); } $this->sendServerMsg($server , $client_id , 'sendMessage' ,true,'', $message ); $this->getUnReadMessageCount($server , $client_id , ['data'=>['user_id' => $user_id ] ] ); //给员工发通知消息 //$note = new LongbingServiceNotice($uniacid); //$note->sendImMessageServiceNoticeToStaff($target_id , $content) ; } //获取未读消息总数 public function getUnReadMessageCount($server ,$client_id ,$data) { $user_id = $data['data']['user_id'] ; $count = ImService::getUnReadMessageCount($user_id); $this->sendServerMsg($server ,$client_id , 'getUnReadMessageCount' , true,'', ['count' => $count ] ) ; } //查询目标客户,给我发送的消息数量 public function getCustomerUnReadMessageCount($server ,$client_id ,$data) { if (isset($data['data']['target_id']) && isset($data['data']['user_id'])) { $user_id = $data['data']['user_id']; $target_id = $data['data']['target_id']; $count = ImService::getUnReadMessageCountByUserIdAndTargetId( $target_id , $user_id); $this->sendServerMsg($server, $client_id, 'getCustomerUnReadMessageCount', true, '', ['count' => $count, 'user_id' => $user_id , 'target_id' => $target_id ]); } } //登陆 public function login($server ,$client_id ,$data) { //登录失败 $user_id = $this->checkLogin($server ,$client_id ,$data); if(!$user_id){ return $this->sendLogin($server , $client_id ) ; } $this->updateClentAndUserIdCache($client_id , $user_id); $this->sendServerMsg($server ,$client_id , 'login' , true ) ; //用户登录成功,给客户发未读消息数量 $this->getUnReadMessageCount($server , $client_id , ['data'=>['user_id' => $user_id ] ] ); } //检查登录 public function checkLogin( $server ,$client_id ,$data ){ if(isset($data['data']['token'])){ $token = $data['data']['token']; $uniacid = $data['data']['uniacid'] ; $user = getCache($token , $uniacid ); if(empty($user)){ return false ; } return $user['id'] ; }else{ echo json_encode($data); } return false ; } //发送登录提示消息信息 public function sendLogin( $server ,$client_id ){ $this->sendServerMsg($server, $client_id ,'login',false,'',$this->noLogin); } //更新缓存客户和用户ID public function updateClentAndUserIdCache($client_id , $user_id){ //缓存客户端对应的用户ID $key = $this->connect_name . $client_id; setCache ( $key, $user_id, 3600, $this->uniacid_wss ); //缓存用户登录对应的客户端ID $key = $this->connect_user_name . $user_id; setCache ( $key, $client_id, 3600, $this->uniacid_wss ); } //根据用户ID获取 $client_id public function getClientIdByUserId($userId){ $key = $this->connect_user_name . $userId; $client_id = getCache( $key , $this->uniacid_wss ) ; return $client_id; } //退出 public function logout($client_id) { $key = $this->connect_name . $client_id; $user_id = getCache( $key , $this->uniacid_wss ) ; //删除客户对应的用户ID delCache($key ,$this->uniacid_wss); //删除用户对应的客户ID $key = $this->connect_user_name . $user_id; delCache($key ,$this->uniacid_wss); } //检查链接是否正常 public function checkWs($server ,$client_id ,$data) { //检查登录 $user_id = $this->checkLogin($server ,$client_id ,$data); if(!$user_id){ return $this->sendLogin($server , $client_id ) ; } $this->updateClentAndUserIdCache($client_id , $user_id) ; $this->sendServerMsg($server, $client_id ,'checkWsOk'); } }