Ejemplo n.º 1
0
 def LoadRoleData(roleid):
     with session_scope() as session:
         generallist = session.query(t_general).filter(
             t_general.rid == roleid).all()
         result = {}
         for general in generallist:
             result[general.id] = general
         if len(result) == 0:
             general = t_general()
             CreateGeneral(roleid, 10102, general)
             general.hp = 9999
             general.def_ = 10000
             general.atk = 9999
             DBEngine.Add(general)
             result[general.id] = general
             general = t_general()
             CreateGeneral(roleid, 10102, general)
             general.hp = 9999
             general.def_ = 10000
             general.atk = 9999
             DBEngine.Add(general)
             result[general.id] = general
             general = t_general()
             CreateGeneral(roleid, 10102, general)
             general.hp = 9999
             general.def_ = 10000
             general.atk = 9999
             DBEngine.Add(general)
             result[general.id] = general
         return result
Ejemplo n.º 2
0
    def LoadUserData(userid):
        # 引入合服机制, 通过判断userid的组成, 判断什么模式
        # 正常模式 userid 为整数
        # 合服模式 userid 为userid_server
        result = None
        if isinstance(userid, int) or isinstance(userid, long):     # 正常模式
            with session_scope() as session:
                result = session.query(t_role).filter(t_role.uid == userid).first()
            if result is None:
                result = t_role()
                result.uid = userid
                result.createtime = GameData.sysTickTime
                CreateRole(result)
                DBEngine.Add(result)
                DBEngine.Update(result)
            result.__server_fix = None
        else:                                                       # 合服模式
            Log.Write("LoadUserData merge tip")
            userid_a = userid.split("_")
            if len(userid_a) < 2:
                raise TypeError("Merge Mode t_role error")

            userid_fix = int(userid_a[0])
            server_fix = int(userid_a[1])
            Log.Write(userid_fix, server_fix)
            with session_scope() as session:
                result = session.query(t_role).filter(
                    and_(
                        t_role.uid == userid_fix,
                        and_(t_role.id > (1000000 * server_fix),
                            (t_role.id < (1000000 * (server_fix + 1)))
                        )
                    )
                ).first()
            if result is None:
                result = t_role()
                result.uid = userid_fix
                result.createtime = GameData.sysTickTime
                CreateRole(result, server_fix)
                DBEngine.Add(result)
                DBEngine.Update(result)
            else:
                m = re.match(r"^S(\d+)-", result.name)      # S999999-xxxx
                server_test = None
                try:
                    xxxtuple = m.groups()
                    server_test = int(xxxtuple[0])              # 服务器编号999999
                    Log.Write("[TIP]server_test", server_test)
                except:
                    pass
                if server_test != server_fix:
                    result.name = u"S%d-" % server_fix + result.name
                    Log.Write("[TIP]name", result.name)
                    DBEngine.Update(result)
            result.__server_fix = server_fix
        Log.Write("LoadUserData", userid, result.id, result.__server_fix)
        result.createtime_utc = ConvertToUTCSeconds(result.createtime)
        return result
Ejemplo n.º 3
0
 def Update(uid, uuid, server=None):
     Log.Write("t_session", uid, uuid)
     with session_scope() as session:
         result = session.query(t_session).filter(t_session.uid == uid).first()
         if result is None:
             result = t_session()
             result.uid = uid
             result.uuid = uuid
             result.server = server
             DBEngine.Add(result)
         else:
             result.uuid = uuid
             result.server = server
             DBEngine.Update(result)
Ejemplo n.º 4
0
 def UpdateVersion(section, ctype, version):
     with session_scope() as session:
         configFile = session.query(t_section_config).filter(
             t_section_config.section == section).filter(
                 t_section_config.ctype == ctype).first()
         if configFile != None:
             configFile.version = version  # 更新配置的版本
             DBEngine.Update(configFile)
         else:
             configFile = t_section_config()  # 添加新的配置
             configFile.section = section
             configFile.ctype = ctype
             configFile.version = version
             DBEngine.Add(configFile)
         return configFile
Ejemplo n.º 5
0
    def Update(section, ctype):
        session = DBEngine.NewSession()
        try:
            config_file = session.query(t_section_config, t_section_config_files).\
                filter(and_(t_section_config.section == section, t_section_config.ctype == ctype)).\
                filter(t_section_config.excute == t_section_config_files.id).first()

            if config_file is None:
                Log.Write("[Error]GameConfig Error:No GameConfig Data")
                return None
            config_file_info = {
                "section": config_file[0].section,
                "ctype": config_file[0].ctype,
                "version": config_file[0].version,
                "excute": config_file[0].excute,
                "url": config_file[1].url,
                "filepath": config_file[1].filepath,
                "url2": config_file[1].url2,
                "url3": config_file[1].url3
            }
            if not GameConfigManager._config_dict.has_key(
                    config_file_info["section"]):
                GameConfigManager._config_dict[
                    config_file_info["section"]] = {}
            GameConfigManager._config_dict[config_file_info["section"]][
                config_file[0].ctype] = config_file_info
            return config_file_info
        except NoResultFound, nf:
            Log.Write("[Error]Database Error: %s" % str(nf))
            return None
Ejemplo n.º 6
0
 def LoadRoleData(roleid):
     '''
     根据rid获取玩家本身的数据
     :param roleid:
     :return:
     '''
     with session_scope() as session:
         result = session.query(t_role).filter(t_role.id == roleid).first()
         if result:
             rid = result.id
             server_fix = None
             if rid > 1000000:
                 server_fix = rid // 1000000     # server_id [1,2,3,...1000]
                 Log.Write("[TIP]server_fix", server_fix)
                 m = re.match(r"^S(\d+)-", result.name)
                 server_test = None
                 try:
                     xxxtuple = m.groups()
                     server_test = int(xxxtuple[0])
                     Log.Write("[TIP]server_test", server_test)
                 except:
                     pass
                 if server_test != server_fix:
                     result.name = u"S%d-" % server_fix + result.name
                     Log.Write("[TIP]name", result.name)
                     DBEngine.Update(result)
             result.createtime_utc = ConvertToUTCSeconds(result.createtime)
     return result
Ejemplo n.º 7
0
 def setSection(section):
     """
     设置分区
     :param section: 分区号|数字
     """
     GameConfigManager._section = section
     if not GameConfigManager._ktv.has_key("section"):  # 初始化分区
         ktv = t_ktv()
         ktv.key = "section"
         ktv.type = "int"
         ktv.value = str(section)
         GameConfigManager._ktv["section"] = ktv
         DBEngine.Add(GameConfigManager._ktv["section"])
     else:
         if int(GameConfigManager._ktv["section"].value) != int(section):
             GameConfigManager._ktv["section"].value = str(
                 section)  # 缓存跟数据库数据做映射
             DBEngine.Update(GameConfigManager._ktv["section"])  # 更新数据的数据
Ejemplo n.º 8
0
 def On(rid, sock):
     '''
     在线
     :param rid: 角色rid
     :param sock: sockfileno
     :return:
     '''
     if not rid:
         return
     log = t_log_onoffline()
     log.rid = rid
     log.sock = sock
     DBEngine.Add(log)
Ejemplo n.º 9
0
    def SecondTick():
        '''
        秒级别定时器
        :return:
        '''
        secondevent = gevent.event.Event()

        def SecondTickProcess():
            nowtime2 = datetime.now()
            Log.Write("SecondTickProcess", nowtime2)

        while True:
            secondevent.wait(1)  # 一秒之后执行
            SecondTickProcess()  # 秒级别执行函数
            DBEngine.UpdateCurrentSession()
            Lock1.ClearCurrent()
Ejemplo n.º 10
0
 def SpawTickTimer(tick, func):
     '''
     创建一个循环时间的定时器
     :param tick: 秒数
     :param func: 函数
     :return:
     '''
     timerevent = gevent.event.Event()
     while True:
         timerevent.wait(tick)
         try:
             func()
         except Exception, e:
             Log.Write(e)
             Log.Write(traceback.format_exc())
         DBEngine.UpdateCurrentSession()
         Lock1.ClearCurrent()
Ejemplo n.º 11
0
    def Init():
        session = DBEngine.NewSession()
        try:
            resourceVersions = session.query(t_section_resource).\
                filter(t_section_resource.status == "excute").\
                order_by(t_section_resource.id.desc()).all()

            if resourceVersions is None:
                Log.Write("[Error]GameResource Error: No GameResource Excute")
                return False

            appConfig = ConfigManager.Singleton()

            GameResourceManager._resource_dict = {}

            for resourceVersion in resourceVersions:
                version = resourceVersion.id
                needrestart = resourceVersion.needrestart
                versionFiles = session.query(t_section_resource_files).filter(t_section_resource_files.r_id == version).all()

                if versionFiles is None:
                    continue

                versionFilesData = []

                for versionFile in versionFiles:
                    versionFileData = {
                        "version": version,
                        "id": versionFile.id,
                        "url": versionFile.url,
                        "filepath": versionFile.filepath,
                        "platform": versionFile.platform,
                        "length": versionFile.length,
                        "needrestart": needrestart,
                        "url2": versionFile.url2,
                        "url3": versionFile.url3,
                    }
                    versionFilesData.append(versionFileData)

                GameResourceManager._resource_dict[version] = versionFilesData
                # Log.Write("GameResourceManager", GameResourceManager._resource_dict)
            return True
        except NoResultFound, nf:
            Log.Write("[Error]Database Error: %s" % str(nf))
            return False
Ejemplo n.º 12
0
    def Init():
        session = DBEngine.NewSession()
        try:
            config_files = session.query(t_section_config, t_section_config_files). \
                filter(t_section_config.excute == t_section_config_files.id).all()

            if config_files is None:
                Log.Write("[Error]GameConfig Error: No GameConfig Data")
                return False

            GameConfigManager._config_dict = {}

            appConfig = ConfigManager.Singleton()

            for config_file in config_files:
                section = config_file[0].section
                config_file_info = {
                    "section": section,
                    "ctype": config_file[0].ctype,
                    "version": config_file[0].version,
                    "excute": config_file[0].excute,
                    "url": config_file[1].url,
                    "filepath": config_file[1].filepath,
                    "url2": config_file[1].url2,
                    "url3": config_file[1].url3
                }
                # Log.Write(section, config_file_info)
                if not GameConfigManager._config_dict.has_key(section):
                    GameConfigManager._config_dict[section] = {}
                GameConfigManager._config_dict[section][
                    config_file[0].ctype] = config_file_info
            # for k, v in GameConfigManager._config_dict.items():
            #     Log.Write("section", k)
            return True
        except NoResultFound, nf:
            Log.Write("[Error]Database Error: %s" % str(nf))
            return False
Ejemplo n.º 13
0
 def UpdateVersion(version):
     session = DBEngine.NewSession()
     try:
         versionFilesData = []
         targetVersion = session.query(t_section_resource).filter(t_section_resource.id == version).\
             filter(t_section_resource.status == "excute").first()
         if targetVersion:
             appConfig = ConfigManager.Singleton()
             # GameResourceManager._resource_dict = {}
             needrestart = targetVersion.needrestart
             versionFiles = session.query(t_section_resource_files). \
                 filter(t_section_resource_files.r_id == version).all()
             if versionFiles:
                 for versionFile in versionFiles:
                     versionFileData = {
                         "version": version,
                         "id": versionFile.id,
                         "url": versionFile.url,
                         "filepath": versionFile.filepath,
                         "platform": versionFile.platform,
                         "length": versionFile.length,
                         "needrestart": needrestart,
                         "url2": versionFile.url2,
                         "url3": versionFile.url3,
                     }
                     versionFilesData.append(versionFileData)
         if not versionFilesData:
             if GameResourceManager._resource_dict.has_key(version):
                 del GameResourceManager._resource_dict[version]
         else:
             GameResourceManager._resource_dict[version] = versionFilesData
         # Log.Write("GameResourceManager", GameResourceManager._resource_dict)
         return True
     except NoResultFound, nf:
         Log.Write("[Error]Database Error: %s" % str(nf))
         return False
Ejemplo n.º 14
0
                    "url2": config_file[1].url2,
                    "url3": config_file[1].url3
                }
                # Log.Write(section, config_file_info)
                if not GameConfigManager._config_dict.has_key(section):
                    GameConfigManager._config_dict[section] = {}
                GameConfigManager._config_dict[section][
                    config_file[0].ctype] = config_file_info
            # for k, v in GameConfigManager._config_dict.items():
            #     Log.Write("section", k)
            return True
        except NoResultFound, nf:
            Log.Write("[Error]Database Error: %s" % str(nf))
            return False
        finally:
            DBEngine.DelSession(session)

    @staticmethod
    def Update(section, ctype):
        session = DBEngine.NewSession()
        try:
            config_file = session.query(t_section_config, t_section_config_files).\
                filter(and_(t_section_config.section == section, t_section_config.ctype == ctype)).\
                filter(t_section_config.excute == t_section_config_files.id).first()

            if config_file is None:
                Log.Write("[Error]GameConfig Error:No GameConfig Data")
                return None
            config_file_info = {
                "section": config_file[0].section,
                "ctype": config_file[0].ctype,
Ejemplo n.º 15
0
def My_load_scalar_attributes(mapper, state, attribute_names):
    session = sessionlib._state_session(state)
    if not session:
        DBEngine.NewSession()._save_or_update_state(state)
    return load_scalar_attributesOld(mapper, state, attribute_names)
Ejemplo n.º 16
0
 def DeadCall(glet):
     Log.Write("dead greenlet", glet, "exception",
               glet.exception, "value", glet.value, "ready",
               glet.ready(), "success", glet.successful())
     DBEngine.DelGreenletSession(glet)
Ejemplo n.º 17
0
from Source.GameConfig.GameConfigManager2 import GameConfigManager
from Source.GameResource.GameResourceManager2 import GameResourceManager


if __name__ == '__main__':
    # 1.读取运行配置
    config_file = "config.xml"
    if len(sys.argv) > 1:
        config_file = sys.argv[1]
    # 1.读取运行配置
    ConfigManager.Create(config_file)
    appConfig = ConfigManager.Singleton()
    Log.Init()
    Log.Write(ConfigManager.Singleton())
    # 2.初始化环境
    if not DBEngine.Init():
        Log.Write("[Error]Database Init Error")
        exit(1)

    SystemParams.Init()     # 重新获取更新白名单|更新版本号|前端的更新版本等信息

    # 3.预加载配置数据
    if not GameConfigManager.Init():
        Log.Write("[Error]GameConfig Init Error")
        exit(1)

    if not GameResourceManager.Init():
        Log.Write("[Error]GameResource Init Error")
        exit(1)

Ejemplo n.º 18
0
 def Now(c, u):
     nowLogConnections = t_log_connections()
     nowLogConnections.t = GameData.sysTickTime
     nowLogConnections.c = c
     nowLogConnections.u = u
     DBEngine.Add(nowLogConnections)
Ejemplo n.º 19
0
        :param time:
        :param func:
        :param param:
        :return:
        '''
        timerevent = gevent.event.Event()
        timerevent.wait(time)
        try:
            if param:
                func(param)
            else:
                func()
        except Exception, e:
            Log.Write(e)
            Log.Write(traceback.format_exc())
        DBEngine.UpdateCurrentSession()
        Lock1.ClearCurrent()

    @staticmethod
    def CreateTickTimer(tick, func):
        '''
        创建循环级别定时器
        :param tick:
        :param func:
        :return:
        '''
        gevent.spawn(TimerManager.SpawTickTimer, tick, func)

    @staticmethod
    def CreateOneTimer(time, func, param):
        '''