예제 #1
0
파일: tcp.py 프로젝트: zhaozw/hall37
 def doSomeLogic(self):
     if not startup.IS_INIT_OK:
         print 'not init OK !!'
         try:
             self.finish()
         except:
             pass
         return
     try:
         taskarg = ftsvr.getTaskRunArg()
         heads = str(taskarg["userheader1"])
         ftlog.debug('WriteTcpRequest 1->', taskarg, heads)
         _type, _group, rec_id = heads.split('_')
         global_conf = ftcon.getConf("freetime:global")
         data_dir = global_conf["data_path"]
         type_conf = ftcon.getConf("freetime:log_type")
         log_conf = type_conf[_type]
         rec_type = int(log_conf["rec_type"])
         reserved_size = int(log_conf["reserved_size"])
         log_size = int(log_conf["record_size"]) + reserved_size + self.EXTRA_SIZE
         record_count = log_conf["single_file_record_count"]
         body = base64.b64decode(taskarg["pack"])
         ftlog.debug('WriteTcpRequest 2->', body)
         cur_time = int(time.time())
         record = "tu" + struct.pack("<BIQ", rec_type, cur_time, int(rec_id)) + body + struct.pack(
             "<%ds" % reserved_size, str()) + "yo"
         self.writeFile(data_dir, _type, _group, int(rec_id), record_count, log_size, record)
     except:
         ftlog.error()
     finally:
         try:
             self.finish()
         except:
             pass
예제 #2
0
 def doSomeLogic(self):
     if not startup.IS_INIT_OK :
         print 'not init OK !!'
         try:
             self.finish()
         except:
             pass
         return
     try:
         taskarg = ftsvr.getTaskRunArg()        
         heads = str(taskarg["userheader1"])
         ftlog.debug('WriteTcpRequest 1->', taskarg, heads)
         _type, _group, rec_id = heads.split('_')
         global_conf = ftcon.getConf("freetime:global")
         data_dir = global_conf["data_path"]     
         type_conf = ftcon.getConf("freetime:log_type")
         log_conf = type_conf[_type]
         rec_type = int(log_conf["rec_type"])
         reserved_size = int(log_conf["reserved_size"])
         log_size = int(log_conf["record_size"]) + reserved_size + self.EXTRA_SIZE
         record_count = log_conf["single_file_record_count"]
         body = base64.b64decode(taskarg["pack"])
         ftlog.debug('WriteTcpRequest 2->', body)
         cur_time = int(time.time())
         record = "tu" + struct.pack("<BIQ", rec_type, cur_time, int(rec_id)) + body + struct.pack("<%ds"%reserved_size, str()) + "yo"
         self.writeFile(data_dir, _type, _group, int(rec_id), record_count, log_size, record)        
     except:
         ftlog.error()
     finally:
         try:
             self.finish()
         except:
             pass
예제 #3
0
파일: gdata.py 프로젝트: zhaozw/hall37
def _initialize():
    global __datas
    if len(__datas) <= 0:
        ftlog.info('_initialize gdata begin.')
        __datas = {}
        pgdict = ftcon.getConf('poker:global')
        sid = ftcon.global_config["server_id"]
        __datas['server_type'] = sid[0:2]
        __datas['server_num'] = sid[2:]
        try:
            __datas['server_num_idx'] = int(sid[2:]) - 1
        except:
            __datas['server_num_idx'] = -1
        __datas.update(pgdict)
        __datas['game_packages'] = tuple(pgdict['game_packages'])
        mincenter = min(ftcon.server_type_map.get(SRV_TYPE_HTTP))
        if mincenter == sid:
            __datas['is_control_process'] = 1
        else:
            __datas['is_control_process'] = 0

        __datas['is_http_process'] = 0
        sdef = ftcon.server_map[sid]
        protocols = sdef.get('protocols')
        if protocols:
            server = protocols.get('server')
            if server:
                for p in server:
                    if p.endswith('http'):
                        __datas['is_http_process'] = 1
                        break
        _dumpGdataInfo()
        ftlog.info('_initialize gdata end.')
    return __datas
예제 #4
0
파일: gdata.py 프로젝트: zhaozw/hall37
def getUserConnIpPortList():
    '''
    取得客户端可接入的TCPIP的IP和端口号列表[(ip, port),(ip, port),(ip, port)...]
    '''
    srvs = serverTypeMap()
    ipports = srvs.getExtendAttr('ipports')
    if not ipports:

        ipdict = {}
        machines = ftcon.getConf('poker:machine')
        for m in machines.values():
            ipdict[m['internet']] = m['internet']
            ipdict[m['intranet']] = m['internet']

        ipports = []
        connids = srvs[SRV_TYPE_CONN][:]
        connids.sort()
        servers = allServersMap()
        for connid in connids:
            srvconn = servers[connid]
            ip = ipdict[srvconn['ip']]
            port = srvconn['protocols']['server']['co-tcp']
            ipports.append((ip, port))
        srvs.setExtendAttr('ipports', ipports)
    return ipports
예제 #5
0
def _get(redisfullkey, defaultvalue=None, intClientidNum=None):
    '''
    获取数据
    :param redisfullkey:
    :param defaultvalue:
    :param intClientidNum:
    :return:
    '''
    if intClientidNum == None:
        rkey = redisfullkey
    else:
        rkey = redisfullkey + ':' + str(intClientidNum)

    if _CONFIG_CMD_PPS_:
        _configCmdPps(rkey)

    value = ftcon.getConf(rkey)
    if value == None:
        ftlog.debug('get configer->', rkey, 'is None !!')
        value = defaultvalue
    if value:
        if not isinstance(value, (list, dict)):
            raise Exception('the configer content is not list or dict !' +
                            rkey)
    return value
예제 #6
0
파일: http.py 프로젝트: zhaozw/hall37
 def updateIndex(self, _type, _group, logid, pbody):
     type_conf = ftcon.getConf("freetime:log_type")
     if "index_field" in type_conf[_type]:
         need_index = type_conf[_type]["index_field"]
         timestamp = int(time.time())
         key = ""
         for i in need_index:
             key += str(pbody[i]) + '.'
         ftsvr.doRedis(_group, "RPUSH",
                       "index:%s:%s:%s" % (_group, _type, key[:-1]),
                       timestamp, logid)
예제 #7
0
파일: http.py 프로젝트: zhaozw/hall37
 def updateIndex(self, _type, _group, logid, pbody):
     type_conf = ftcon.getConf("freetime:log_type")
     if "index_field" in type_conf[_type]:
         need_index = type_conf[_type]["index_field"]
         timestamp = int(time.time())
         key = ""
         for i in need_index:
             key += str(pbody[i]) + '.'
         ftsvr.doRedis(_group, "RPUSH",
                       "index:%s:%s:%s" % (_group, _type, key[:-1]),
                       timestamp, logid)
예제 #8
0
    def doSomeLogic2(self):
        ftlog.info("MyProto do some logic in tasklet")
        #test redis aio
        ftsvr.doRedis("user01", "SET", "zx", 1)

        #Testing doHttp...
        #code, page = ftsvr.doHttp("GET", "http://www.google.com",
        #       {'User-Agent': ['Twisted']}) #test connect timeout
        #code, page = ftsvr.doHttp("GET", "http://news.sina.com.cn/",
        #       {'User-Agent': ['Twisted']}, '', 15, 0.1) #test request timeout
        #page = ftsvr.doHttp("GET", "http://news.sina.com.cn/sssss",
        #       {'User-Agent': ['Twisted']}) #test 404
        code, page = ftsvr.doHttp("POST", "http://127.0.0.1:8003/",
                                  {'User-Agent': ['Twisted']}, "HAHAHA")
        print code, page
        print "HTTP", code, len(page), page

        log_data = struct.pack("64s", "HAHAHA")
        ftlog.sendHttpLog("user01", "chip", log_data)

        #pipeline需要加锁,否则结果可能混乱,框架中已经加了lock,参见ftsvr代码
        count = 1000
        pipecount = 100
        st = time.time()
        for x in xrange(count / pipecount):
            if x % 100 == 0:
                ftlog.info(x)
            pl = ftsvr.getRedisPipe("user01")
            for y in xrange(pipecount):
                pl.set("zx", 1)
            result = ftsvr.doRedisPipe(pl)
            if len(result) != pipecount:
                ftlog.debug("ERRORPIPELINE")
        ftlog.info("SetPerS:", count / (time.time() - st))

        #test ftagent and udpquery
        ftlog.debug(ftcon.getConf("server"), caller=self)
        ftlog.debug(ftsvr.getTaskRunArg())
        ftlog.debug(ftsvr.doUdpQuery("LO01", "abcdefgh"))
        ftlog.debug(ftagent.query("GA01", "TCPTCPSENDBYAGENT"))

        #test cron
        _tstr = time.strftime('%Y%m%d', time.localtime())
        cron2 = FTCron(
            '{"times_in_day":{"first":"15:00","interval":5, "count":32},\
                        "days":{"first":"%s", "interval":"2m", "count":10}}' %
            (_tstr))
        ftlog.debug(cron2.getTimeList(), cron2.getDaysList())
        ftlog.debug("SEC=", cron2.getTodayNextLater())

        #test timer
        tr = FTTimer(3, self.timerFunc, 1, 2, 3, aaa=111)
예제 #9
0
파일: configure.py 프로젝트: zhaozw/hall37
def _get(redisfullkey, defaultvalue=None, intClientidNum=None):
    if intClientidNum == None:
        rkey = redisfullkey
    else:
        rkey = redisfullkey + ':' + str(intClientidNum)

    if _CONFIG_CMD_PPS_:
        _configCmdPps(rkey)

    value = ftcon.getConf(rkey)
    if value == None:
        ftlog.debug('get configer->', rkey, 'is None !!')
        value = defaultvalue
    if value:
        if not isinstance(value, (list, dict)):
            raise Exception('the configer content is not list or dict !' + rkey)
    return value
예제 #10
0
파일: http.py 프로젝트: zhaozw/hall37
 def parseBody(self, body, _type):
     type_conf = ftcon.getConf("freetime:log_type")
     try:
         _conf = type_conf[_type]
     except:
         ftlog.error("type not config!", _type)
         return None
     try:
         _format = _conf["format"]
         _size = _conf["record_size"]
     except:
         ftlog.error("format or record_size not config!", _conf)
         return None
     if len(body) != _size:
         ftlog.error("log_size not match config!", body)
         return None
     try:
         pbody = struct.unpack(_format, body)
         return pbody
     except:
         ftlog.error("struct parse error!", _format, body)
         return None
예제 #11
0
파일: http.py 프로젝트: zhaozw/hall37
 def parseBody(self, body, _type):
     type_conf = ftcon.getConf("freetime:log_type")
     try:
         _conf = type_conf[_type]
     except:
         ftlog.error("type not config!", _type)
         return None
     try:
         _format = _conf["format"]
         _size = _conf["record_size"]
     except:
         ftlog.error("format or record_size not config!", _conf)
         return None
     if len(body) != _size:
         ftlog.error("log_size not match config!", body)
         return None
     try:
         pbody = struct.unpack(_format, body)
         return pbody
     except:
         ftlog.error("struct parse error!", _format, body)
         return None
예제 #12
0
def _initialize():
    """初始化全局配置"""
    global _datas
    if len(_datas) <= 0:
        ftlog.info('_initialize gdata begin.')
        _datas = {}
        pgdict = ftcon.getConf('poker:global')
        sid = ftcon.global_config["server_id"]
        _datas['server_type'] = sid[0:2]                            # 服务类型
        _datas['server_num'] = sid[2:]                              # 服务数量
        try:
            _datas['server_num_idx'] = int(sid[2:]) - 1             # 服务的索引
        except:
            _datas['server_num_idx'] = -1
        _datas.update(pgdict)
        _datas['game_packages'] = tuple(pgdict['game_packages'])    # 游戏包
        mincenter = min(ftcon.server_type_map.get(SRV_TYPE_HTTP))   # 游戏的HTTP服务
        if mincenter == sid:
            _datas['is_control_process'] = 1                        # 是否控制处理服务器
        else:
            _datas['is_control_process'] = 0

        _datas['is_http_process'] = 0
        sdef = ftcon.server_map[sid]
        protocols = sdef.get('protocols')                           # 协议
        if protocols:
            server = protocols.get('server')                        # 服务器
            if server:
                for p in server:
                    if p.endswith('http'):
                        _datas['is_http_process'] = 1               # 是否是http服务
                        break

        _dumpGdataInfo()
        ftlog.info('_initialize gdata end.')
    return _datas