コード例 #1
0
ファイル: protocols.py プロジェクト: zhaozw/hall37
 def handleRequest(self):
     taskarg = ftsvr.getTaskRunArg()
     request = taskarg['data']
     if not gdata.initializeOk():
         ftlog.info('TYCommonHttpRequest not initialize ok, ignore this request :', request.path)
         request.setResponseCode(503)
         request.finish()
         return
     runhttp.handlerHttpRequest(request)
コード例 #2
0
 def handleRequest(self):
     taskarg = ftsvr.getTaskRunArg()
     request = taskarg['data']
     if not gdata.initializeOk():
         ftlog.info(
             'TYCommonHttpRequest not initialize ok, ignore this request :',
             request.path)
         request.setResponseCode(503)
         request.finish()
         return
     runhttp.handlerHttpRequest(request)
コード例 #3
0
ファイル: protocols.py プロジェクト: zhaozw/hall37
 def doSomeLogic(self):
     args = ftsvr.getTaskRunArg()
     src = args.get('src')
     dst = args.get('dst')
     userheader1 = args.get('userheader1')
     userheader2 = args.get('userheader2')
     msg = ftsvr.getTaskPack()
     #         ftlog.debug('TYCommonS2AProto id=', id(self), 'src=', src, 'dst=', dst, 'h1=', userheader1, 'h2=', userheader2, 'pack=', msg)
     if not gdata.initializeOk():
         ftlog.info('TYCommonS2AProto not initialize ok, ignore this message :', src, dst, userheader1, userheader2,
                    msg)
         return
     runcmd.handlerCommand(msg)
コード例 #4
0
 def doSomeLogic(self):
     args = ftsvr.getTaskRunArg()
     src = args.get('src')
     dst = args.get('dst')
     userheader1 = args.get('userheader1')
     userheader2 = args.get('userheader2')
     msg = ftsvr.getTaskPack()
     #         ftlog.debug('TYCommonS2AProto id=', id(self), 'src=', src, 'dst=', dst, 'h1=', userheader1, 'h2=', userheader2, 'pack=', msg)
     if not gdata.initializeOk():
         ftlog.info(
             'TYCommonS2AProto not initialize ok, ignore this message :',
             src, dst, userheader1, userheader2, msg)
         return
     runcmd.handlerCommand(msg)
コード例 #5
0
 def madeHandler(self):
     '''
     TCP链接建立处理
     '''
     self.userId = 0  # 当前连接的UserId
     if not gdata.initializeOk():
         ftlog.info(
             'COTCPProto-madeHandler not initialize ok, close this TCP')
         self.closeConnection(1)
         return
     self.timeOutCount = 0  # 新连接的超时次数
     self.heart_beat_count = 0  # 新连接的心跳次数
     peer = self.transport.getPeer()
     self.clientAddress = str(peer.host) + ':' + str(peer.port)  # 当前连接的地址
     if not self in _NEW_PROTOCOLS:
         _NEW_PROTOCOLS[self] = self
     ftlog.info('TCP madeHandler', self.clientAddress)
コード例 #6
0
def onTimer():
    # 配置时间点执行 默认早晨7点
    global _initing
    behaviourConf = dizhuconf.getUserBehaviourReward()
    if not behaviourConf or behaviourConf.get('open', 0) != 1:
        return

    if not gdata.initializeOk():
        return

    try:
        executeTime = behaviourConf.get('executeTime', "6:05:00")
        executeTime = datetime.datetime.strptime(executeTime, "%H:%M:%S")
        if not _initing:
            if datetime.datetime.now().time() >= executeTime.time():
                _initing = _getInfoFromTxt(behaviourConf)
        else:
            if datetime.datetime.now().time() < executeTime.time():
                _initing = False

    except Exception, e:
        _initing = False
        ftlog.warn('dizhu_user_behaviour.onTimer.config err=', e.message)
        return
コード例 #7
0
    def doServerTcpMsg(self):
        '''
        其他服务发送至CONN服务的消息处理 
        绝大部分需要转发至用户客户端
        '''
        args = ftsvr.getTaskRunArg()
        src = args.get('src')
        dst = args.get('dst')
        userheader1 = args.get('userheader1')
        userheader2 = args.get('userheader2')
        msgstr = ftsvr.getTaskPack()
        cmd = strutil.getJsonStr(msgstr, 'cmd', '')

        ftlog.debug('COS2AProto-doServerTcpMsg src=', src, 'dst=', dst, 'h1=',
                    userheader1, 'h2=', userheader2, 'cmd=', cmd, 'pack=',
                    msgstr)
        if not gdata.initializeOk():
            ftlog.info(
                'COS2AProto-doServerTcpMsg not initialize ok, ignore this message :',
                ftsvr.getTaskPack())
            return

        if userheader1 == 'S0':  # 发送给用户客户端的消息标记
            toUserId = int(userheader2)
            if toUserId in _ONLINE_USERS:
                user = _ONLINE_USERS[toUserId]
                if cmd == 'user_info':
                    # 链接建立后, 第一个返回给客户端的命令必须是user_info
                    isFirst = 0
                    if user.firstUserInfo == 0:
                        isFirst = 1

                    user.sendTcpMessage(msgstr)
                    user.firstUserInfo = 1

                    # 强制进行第一次心跳处理, 发送led,返回比赛报名情况等
                    if isFirst:
                        msg = '{"cmd":"heart_beat","params":{"userId":%d,"gameId":%d,"clientId":"%s","must":1}}' % (
                            toUserId, user.gameId, user.clientId)
                        router.sendUtilServer(msg, toUserId)

                    if len(user.delaySendMsg) > 0:
                        mlist = user.delaySendMsg
                        user.delaySendMsg = []
                        for m in mlist:
                            user.sendTcpMessage(m)
                else:
                    # 只有第一个命令user_info完成后, 后续的消息才会发送给客户端
                    if user.firstUserInfo == 1:
                        user.sendTcpMessage(msgstr)
                    else:
                        if user.delaySendMsg != None and len(
                                user.delaySendMsg) < 20:
                            user.delaySendMsg.append(msgstr)
                        else:
                            ftlog.info('ERROR, the user tcp bind not ok !',
                                       toUserId, cmd)
            else:
                ftlog.info('ERROR, the user is already offline !', toUserId,
                           cmd)
        else:
            # 当前进程需要处理的消息, 例如更新配置,热更新,强制用户退出等
            msg = MsgPack()
            try:
                msg.unpack(msgstr)
            except:
                raise Exception('the json data error 6 !! [' + repr(msgstr) +
                                ']')
            task = FTTasklet.getCurrentFTTasklet()
            task.pack = msg
            task.run_args['pack'] = msg
            runcmd.handlerCommand(msg)
コード例 #8
0
    def doClientTcpMsg(self):
        """
        接收到一个的用户客户端的TCP消息
        """
        msgstr = ftsvr.getTaskPack()
        if not msgstr:
            return

        ftlog.debug('======== RECEIVE TCP->', self.clientAddress, 'pack=|',
                    repr(msgstr), '|')
        msgstr = structProtocolHelper.decode(msgstr)
        if not gdata.initializeOk():
            ftlog.warn(
                'COTCPProto-doClientTcpMsg not initialize ok, ignore this message :',
                msgstr)
            return

        if len(msgstr) < 11:  # {"cmd":"a"}
            ftlog.warn('simple json format check too short ! [' +
                       repr(msgstr) + ']')
            return
        if msgstr[0] == '[':  # 代理机器校验
            _proxyCheck(msgstr, self)
            return
        if msgstr[0] != '{':
            ftlog.warn('simple json format check not start with { ! [' +
                       repr(msgstr[0:10]) + '...]')
            return

        # 后3位可能是  }\n\0 或 }\n 或 }\0 或 } 或 }\r\n
        if msgstr[-1] == '}':
            pass
        elif msgstr[-2] == '}':
            pass  # msgstr = msgstr[0:-1]
        elif msgstr[-3] == '}':
            pass  # msgstr = msgstr[0:-2]
        elif msgstr[-4] == '}':
            pass  # msgstr = msgstr[0:-3]
        elif msgstr[-5] == '}':
            pass  # msgstr = msgstr[0:-4]
        else:
            ftlog.warn('simple json format check not end with } ! [...' +
                       repr(msgstr[-10:]) + ']')
            return

        if ide_debug():
            ide_print_pack("RECV TCP_", json.loads(msgstr))
        userId = strutil.getJsonInt(msgstr, 'userId', 0)
        if userId <= 0:
            ftlog.warn(
                'COTCPProto-doClientTcpMsg the userId error, ignore this message :',
                userId, msgstr)
            return

        msgqueue = _MSG_QUEUES.get(userId, None)
        if msgqueue == None:
            msgqueue = []
            _MSG_QUEUES[userId] = msgqueue
            ftlog.debug('creat user msgqueue !', userId)

        if len(msgqueue) > _MSG_QUEUES_MAX_LEN and msgstr.find(
                '"conn_lost"') < 0:  # TODO 这个经验值如何确定?
            ftlog.warn(
                'the user msgqueue queue too large !!, ignore this message :',
                userId)
            return

        msgqueue.append(msgstr)
        if len(msgqueue) > 1:
            ftlog.debug('the user msgqueue is process, wait ...', userId)
            return

        ftlog.debug('process user msgqueue !', userId)

        while 1:
            msgstr1 = msgqueue[0]
            try:
                self._processUserMessage(userId, msgstr1)
            except:
                ftlog.error('ERROR _processUserMessage', userId, msgstr1)
            del msgqueue[0]
            if len(msgqueue) == 0:
                break
        del _MSG_QUEUES[userId]
        ftlog.debug('remove user msgqueue !', userId)