Exemplo n.º 1
0
 def leave_channel(self, msg):
     """
     离开临时会话.(一方退出即终结临时会话)
     :param msg:
     :return:
     """
     debug("ChatSrv leave_channel", msg)
     user_id = msg.getParamInt('userId')
     target_user_id = msg.getParamInt('targetUserId')
     channel_key = _get_channel_key(user_id, target_user_id)
     if channel_key in self.channels:
         del self.channels[channel_key]
         debug("ChatSrv clean channel", channel_key)
         is_friend = _check_friend(user_id, target_user_id)
         if not is_friend:
             now = current_milli_time()
             msg_id = get_msg_id(user_id, target_user_id, now)
             content = ftstr.dumps({"code": "chat", "status": "leave_channel"})
             system_message = ChatMessage(user_id, target_user_id, 7, now, content)
             self.service.save_record(user_id, target_user_id, msg_id, system_message)
             # 回应对方离线
             self.write(target_user_id, user_id, msg_id, system_message)
             # TODO 清理临时聊天消息
         ftcore.runOnceDelay(0.1, self.__do_leave_game_message,user_id, target_user_id)
     if channel_key in self.tmp_channels:
         del self.tmp_channels[channel_key]
         debug("ChatSrv clean temp channel", channel_key)
Exemplo n.º 2
0
 def clean_channel(self, user_id, target_user_id):
     """
     创建临时会话.(双方各发一条,创建临时会话,防止骚扰)
     :return:
     """
     debug("ChatGameSrv do clean_channel", user_id, target_user_id)
     channel_key = _get_channel_key(user_id,target_user_id)
     if channel_key in self.tmp_channels:
         del self.tmp_channels[channel_key]
         debug("ChatSrv clean_channel", user_id, target_user_id)
Exemplo n.º 3
0
 def talk_message1(self, msg):
     """
     聊天消息.
     :param msg: userId,targetUserId,msgType,content,cid
     :return: msgId,ok
     """
     debug("ChatSrv talk_message", msg)
     user_id = msg.getParamInt('userId')
     target_user_id = msg.getParamInt('targetUserId')
     msg_type = msg.getParamInt('msgType')
     content = msg.getParamStr('content')
     #客户端消息序号
     sn = msg.getParamStr('sn')
     is_friend = _check_friend(user_id,target_user_id)
     debug("ChatSrv talk_message", user_id, target_user_id, msg_type, content, sn, is_friend)
     resp = MsgPack()
     resp.setCmd('chat')
     resp.setResult('action', 'send_message')
     try:
         msg_id, content, now = self.do_verify(msg)
         channel_key = _get_channel_key(user_id, target_user_id)
         if not is_friend and channel_key not in self.channels  :
             # 临时会话已关闭,不允许发送消息
             resp.setResult("status", "notFriend")
         else:
             obj = ftstr.loads(content)
             game_code = obj.get("code", "")
             if game_code == "" or game_code == "invite":
                 info = {
                     "time": now,
                     "userId": user_id,
                     "targetUserId": target_user_id,
                     "msgType": msg_type,
                     "content": content
                 }
             else:
                 # 游戏更新不更改初始来源
                 info = {
                     "time": now,
                     "userId": target_user_id,
                     "targetUserId": user_id,
                     "msgType": msg_type,
                     "content": content
                 }
             self.write(user_id,target_user_id,msg_id,info)
             self.service.save_record(user_id, target_user_id, msg_id, info)
             resp.setResult('sn', sn)
             resp.setResult('time', now)
             resp.setResult('msgId', msg_id)
             resp.setResult('status', "ok")
     except TYBizException, e:
         resp.setResult("status", "error")
         resp.setError(e.errorCode, e.message)
Exemplo n.º 4
0
 def talk_message(self, msg):
     """
     聊天消息.
     :param msg: userId,targetUserId,msgType,content,cid
     :return: msgId,ok
     """
     debug("ChatSrv talk_message", msg)
     user_id = msg.getParamInt('userId')
     target_user_id = msg.getParamInt('targetUserId')
     msg_type = msg.getParamInt('msgType')
     content = msg.getParamStr('content')
     # 客户端消息序号
     sn = msg.getParamStr('sn')
     is_friend = _check_friend(user_id, target_user_id)
     debug("ChatSrv talk_message", user_id, target_user_id, msg_type, content, sn, is_friend)
     resp = MsgPack()
     resp.setCmd('chat')
     resp.setResult('action', 'send_message')
     try:
         channel_key = _get_channel_key(user_id, target_user_id)
         if not is_friend and channel_key not in self.channels:
             # 临时会话已关闭,不允许发送消息
             resp.setResult("status", "notFriend")
         else:
             game_obj = ftstr.loads(content)
             message_id = game_obj.get("msgId", "")
             if message_id:
                 # 游戏应答
                 code = game_obj.get("code", "refuse")
                 info = self.service.get_record(message_id)
                 if info:
                     chat_message = GameChatMessage.load_info(info)
                     chat_message.code = code
                 else:
                     raise StrangerException()
             else:
                 time = current_milli_time()
                 message_id = get_msg_id(user_id,target_user_id,time)
                 chat_message = ChatMessage(user_id,target_user_id,msg_type,time,content)
             self.write(user_id, target_user_id, message_id, chat_message)
             self.service.save_record(user_id, target_user_id, message_id, chat_message)
             resp.setResult('sn', sn)
             # resp.setResult('time', time)
             resp.setResult('msgId', message_id)
             resp.setResult('status', "ok")
     except TYBizException, e:
         resp.setResult("status", "error")
         resp.setError(e.errorCode, e.message)
Exemplo n.º 5
0
 def check_channel(self, msg):
     """
     检查通道是否存在.
     :param msg:
     :return:
     """
     user_id = msg.getParamInt('userId')
     target_user_id = msg.getParamInt('targetUserId')
     channel_key = _get_channel_key(user_id, target_user_id)
     debug("ChatSrv check_channel", user_id, target_user_id)
     resp = MsgPack()
     resp.setCmd('chat')
     resp.setResult('action', 'check_channel')
     if channel_key in self.channels:
         resp.setResult('ok', 1)
     else:
         resp.setResult('ok', 0)
     tyrpcconn.sendToUser(user_id, resp)
Exemplo n.º 6
0
 def check_channel(self, user_id, target_user_id):
     """
     创建临时会话.(双方各发一条,创建临时会话,防止骚扰)
     :return:
     """
     channel_key = _get_channel_key(user_id,target_user_id)
     debug("ChatGameSrv check_channel", channel_key, self.tmp_channels)
     if channel_key in self.tmp_channels:
         _ = self.tmp_channels[channel_key][0]
         if _ == user_id:
             now = self.tmp_channels[channel_key][1]
             msg_id = self.tmp_channels[channel_key][2]
             del self.tmp_channels[channel_key]
             debug("ChatGameSrv end_channel", user_id, target_user_id,now,msg_id)
             return True,now,msg_id
     now = current_milli_time()
     msg_id = get_msg_id(user_id, target_user_id, now)
     self.tmp_channels[channel_key] = [target_user_id,now,msg_id]
     debug("ChatGameSrv create_channel", user_id, target_user_id, now, msg_id)
     return False,now,msg_id
Exemplo n.º 7
0
 def create_channel(self, msg):
     """
     创建临时会话.(双方各发一条,创建临时会话,防止骚扰)
     :param msg:
     :return:
     """
     debug("ChatSrv create_channel", msg)
     user_id = msg.getParamInt('userId')
     target_user_id = msg.getParamInt('targetUserId')
     is_friend = _check_friend(user_id, target_user_id)
     channel_key = _get_channel_key(user_id,target_user_id)
     #重用快速创建的通道
     if channel_key not in self.channels:
         if channel_key in self.tmp_channels:
             _ = self.tmp_channels[channel_key][0]
             if _ == user_id :
                 del self.tmp_channels[channel_key]
                 channel_uuid  = str(uuid.uuid1())
                 self.channels[channel_key] = channel_uuid
                 debug("ChatSrv create_channel", user_id, target_user_id, channel_uuid)
             else:
                 debug("ChatSrv create_channel again", user_id, target_user_id,self.tmp_channels[channel_key])
                 self.tmp_channels[channel_key] = [target_user_id]
         else:
             self.tmp_channels[channel_key] = [target_user_id]
     resp = MsgPack()
     resp.setCmd('chat')
     resp.setResult('action', 'create_channel')
     try:
         online_state = get_online_state(target_user_id)
         author_time,last_time = get_user_last_time(target_user_id)
         resp.setResult('userId', user_id)
         resp.setResult('targetUserId', target_user_id)
         resp.setResult('onlineState', online_state)
         resp.setResult('authorTime', author_time)
         resp.setResult('lastTime', last_time)
         resp.setResult('isFriend', is_friend)
         resp.setResult('status', "ok")
     except TYBizException, e:
         resp.setResult('status', "error")
         resp.setError(e.errorCode, e.message)