Esempio n. 1
0
    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])
Esempio n. 2
0
 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())
Esempio n. 3
0
 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)
Esempio n. 4
0
    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
Esempio n. 5
0
    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()