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
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
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)
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
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
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
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"]) # 更新数据的数据
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)
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()
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()
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
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
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
"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,
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)
def DeadCall(glet): Log.Write("dead greenlet", glet, "exception", glet.exception, "value", glet.value, "ready", glet.ready(), "success", glet.successful()) DBEngine.DelGreenletSession(glet)
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)
def Now(c, u): nowLogConnections = t_log_connections() nowLogConnections.t = GameData.sysTickTime nowLogConnections.c = c nowLogConnections.u = u DBEngine.Add(nowLogConnections)
: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): '''