def _notice_others_self_quit(self): # 广播用户离线事件(逐个房间通知离开事件) leave_noticer = ConchLeaveRoomEventNoticer(HornerPacketHandler.COMMUNICATION_EVENT, HornerPacketHandler.EVT_TALK_LEAVEROOM) leave_noticer.setSessId(self.sess_id) leave_noticer.changeSuccess() if self.role == LiveRequest.ROLE_VISITOR: leave_noticer.setIsVisitor() room_id_list = Chatroom.allPaticipatedRoom(self.company_id, self.sess_id) for r_id in room_id_list: chat_room = Chatroom(self.company_id, r_id) if chat_room.isLoadSuccess(): chat_room.broadcast(self.live_request_list, leave_noticer.toString(), [self.sess_id])
def _notice_room_joined(self, room_id, client_information): ''' 通知新人加入房间 :param recver: :param room_id: :param client_information: :return: ''' noticer_room_joined = ConchJoinRoomEventNoticer(HornerPacketHandler.COMMUNICATION_EVENT, HornerPacketHandler.EVT_TALK_JOINROOM) noticer_room_joined.setSessId(self.sess_id) noticer_room_joined.setRoomId(room_id) noticer_room_joined.client_infor = client_information noticer_room_joined.changeSuccess() chatroom = Chatroom(self.company_id, room_id) if chatroom.isLoadSuccess(): chatroom.broadcast(self.live_request_list, noticer_room_joined.toString())
def run(self): chat_room_id = self._package.get('remoter', '') company_id = self._package.get('cid', '') cur_uuid = self._package.get('sessid', '') chat_room = Chatroom(company_id, chat_room_id) # 构造文本消息对象 msg_noticer = ConchMessageNoticer(HornerPacketHandler.COMMUNICATION_MESSAGE, self._package.get('cmd')) msg_noticer.setContent(self._package.get('content')) msg_noticer.setSessId(self._package.get('sessid')) msg_noticer.setRoomId(self._package.get('remoter')) msg_noticer.changeSuccess() if chat_room.isLoadSuccess(): chat_room.broadcast(self.live_request_list, msg_noticer.toString(), [cur_uuid]) response_noticer = ConchResponseNoticer(HornerPacketHandler.COMMUNICATION_RESPONSE, ConchResponseNoticer.ERR_NONE) response_noticer.changeSuccess() return response_noticer else: return ConchResponseNoticer(HornerPacketHandler.COMMUNICATION_RESPONSE, ConchResponseNoticer.ERR_CHATROOM_NOEXIST)
def run(self): horner_gear = HornerGear() if self.sameUUID(self.sess_id): # 客户端UUID冲突 err_noticer = ConchResponseNoticer(HornerPacketHandler.COMMUNICATION_RESPONSE, ConchResponseNoticer.ERR_CONFLICTION_UUID) err_noticer.setErrorID(ConchResponseNoticer.ERR_CONFLICTION_UUID) return err_noticer else: _noticer = ConchBeginEventNoticer(HornerPacketHandler.COMMUNICATION_EVENT, HornerPacketHandler.EVT_CMD_CONNECTION) _noticer.setSessId(self.live_request.getUUID()) if self.live_request.isCustomService(): # 当前用户会话是客服人员 horner_gear.addLiveSessionToCompany(self.company_id, self.live_request.getUUID()) _noticer.changeSuccess() else: # 客户进入对话,选择客服并创建聊天室 _noticer.setIsVisitor() group_id = self._package.get('gid') if group_id is None: group_id = 'default' custom_service_id = horner_gear.choiceCustomServicer(self.company_id, self._package.get('gid')) if (custom_service_id is not None): custom_service_id = ensureString(custom_service_id) c_room_id = Chatroom.createChatRoom(self.company_id, custom_service_id) if c_room_id is not None: room = Chatroom(self.company_id, c_room_id) if room.isLoadSuccess(): room.addRequestUuid(self.live_request.getUUID()) horner_gear.addLiveSessionToCompany(self.company_id, self.live_request.getUUID()) _noticer.setRoomId(c_room_id) # 通知客服有新对话房间建立 self._notice_room_created(custom_service_id, c_room_id, self.client_infor) # 房间广播新人加入事件 self._notice_room_joined(c_room_id, self.client_infor) _noticer.changeSuccess() else: _noticer.setMessage('没有客服人员在线,前端改留言板服务!') return _noticer
def quitFromAllTalkRoom(self): ''' 从所有聊天室中退出 ''' horner_gear_handler = HornerGear().getHandler() talk_room_wildcard_label = "%s:%s:*" % (CacheKeys.CHATROOM_KEY, self.company_id) _same_company_rooms = horner_gear_handler.keys(talk_room_wildcard_label) for _room_id in _same_company_rooms: _regular_room_name = ensureString(_room_id).split(':') if 3 == len(_regular_room_name): _check_room = Chatroom(self.company_id, _regular_room_name[2]) if _check_room.isLoadSuccess(): _check_room.removeRequestUuid(self.sess_id) if (1 == _check_room.cntParticipates()): _check_room.closeRoomNotice(self.application.getLiveRequestHandlerList()) # 从公司大厅中删除 self._quitFromHall()