def message(self): """ 获取需要的信息 """ #获取对应等级范围内对应玩家的id while not self.stoped: self.mapid_pos = {} self.levels_players = {} for levels in self.LEVELS.itervalues(): cols = ['pos', 'mapId', 'id'] players = PlayerData.get_level_pvalue(levels[0], levels[1], cols, 100) if not players: continue while players: player = random.choice(players) players.remove(player) levels_players = self.levels_players.setdefault(tuple(levels), []) levels_players.append(player) if self.COUNT < len(levels_players): break p_pos = player['pos'] mid = player['mapId'] pid = player['id'] poses = self.mapid_pos.setdefault(mid, [[],[]]) if p_pos and p_pos not in poses[PLAYER_POS_INDEX]: poses[PLAYER_POS_INDEX].append(p_pos) self._get_npc_pos(mid, pid, poses) sleep(10*60)
def _w_boos(self): """ 世界boos开启提前广播(判断时间是否到达) """ res_starts = self.fetch_start_time while 1: min_sec = 0 common.current_time() now_sec = self.get_today_seconds time_keys = res_starts.keys() time_keys.sort() for start_sec, res_blid in res_starts.iteritems(): if self.w_start_boss: continue boss_id = self.w_bosses[res_blid] #setting表的改动后建立新的boss数据 if boss_id: w_boss = self.bosses.get(boss_id) else: w_boss = self._new_world_boss(res_blid) l_sec = start_sec - now_sec rs, data = w_boss.handle_start_time(l_sec, min_sec) w_boss.set_start_type(time_keys.index(start_sec)) if rs: w_boss.start(data) self.w_start_boss = w_boss else: min_sec = data #还有多久通知min_sec if min_sec <= 0: min_sec = self.fetch_notice_start sleep(min_sec)
def del_expire_mail(self): """ 每日凌晨4点删除过期的邮件 """ four = cur_day_hour_time(4) ct = current_time() sleep_time = four-ct if ct<four else MailMgr.SLEEP_TIME-(ct-four) log.info("del_expire_mail sleep %s times", sleep_time) sleep(sleep_time) store = Game.rpc_store while 1: #计算段数 limit = MailMgr.LIMIT a_n = store.count(Mail.TABLE_NAME, {'_id':{FOP_NE:0}}) u_n = a_n/limit+1 if a_n%limit else a_n/limit sections = [i for i in xrange(u_n)] sections.append(u_n) sections.sort(reverse=True) ct = current_time() onls = Game.rpc_player_mgr.get_online_ids() del_time = ct - MailMgr.EXPIRE_TIME querys = {'pid':{FOP_NIN:onls}, 'ct':{FOP_LTE:del_time}} for section in sections: mails = store.query_loads(Mail.TABLE_NAME, querys=querys, limit=limit, skip=section*limit) for m_d in mails: self._del_mail(m_d, store) sleep(MailMgr.SLEEP_TIME)
def day_sign(player): print "^"*70 test_init(player) test_sign(player) print "v"*70 from corelib import sleep sleep(200)
def start(self): self.stoped = False self.svr = grpc.RpcServer() self.svr.bind(self.addr) self.svr.register(self) self.svr.start() # 用来阻塞住主协程 self._waiter = gevent.event.Event() self._waiter_stoped = gevent.event.Event() try: while 1: #检查父进程是否已经关闭 if not self._exist_pid(): self._wait_game_stop() log.warn(u'主进程(%s)已经退出,子进程(%s)将自动关闭', self.pid, os.getpid()) os.environ['PARENT_STOPED'] = '1' break try: if self._waiter.wait(2): break except KeyboardInterrupt: pass except Exception as e: log.info('subgame app error:%s', e) try: self._stop() finally: self._waiter_stoped.set() sleep(2) self._svr_stop() sleep(0.5)
def _loop(self, aFinishSitTime=0): """ 按规定时间每一段时间获得一段经验 aFinishSitTime 为零时表示开始打坐 不为零 表示已打坐的时间 """ tPerTime = self.fetch_exppre_time is_online = aFinishSitTime while self.is_sit: aFinishSitTime += tPerTime if aFinishSitTime > self.fetch_time_max: self.stop_sit() break if is_online: #上线打坐时算出第一次到达60s剩余的描述 sleep(tPerTime - aFinishSitTime % tPerTime) is_online = False else: sleep(tPerTime) #在线每两分钟的广播 self._sit_time += 60 if self._sit_time / 60 % 2 == 0: self.player.pub(MSG_SIT_PER, 2) #服务端检测位置是否发生变化 if self.start_sit_pos and self.start_sit_pos != self.player.data.pos: log.debug('start_sit_pos = %s, change_pos = %s', self.start_sit_pos, self.player.data.pos) self.stop_sit() break self.add_sit_exp()
def _sys_test(self): """ 发送测试用系统消息 """ if not Game.instance: return while 1: sleep(10) self.sys_send(u'测试用系统消息(%s)\n' % datetime.datetime.now())# * 9999)
def run(self): import game game.init(self) sys.modules['app'] = self self.names = None #subgame names self.sub_mgr = subgame.SubGameMgr(self) self.sub_mgr.start() self.rpc_svr.bind(self.admin_addr) self.rpc_svr.register(self) self.rpc_svr.start() self._init_web() self.web_svr.start() log.info('app started') while 1: try: self._waiter.wait() break except KeyboardInterrupt: log.info('app stoped:KeyboardInterrupt') except SystemExit: log.info('app stoped:SystemExit') except: log.log_except() break log.info('spawn app stop') spawn(self.stop) sleep(0.2) cmd = ' '.join(map(str, [sys.executable,] + sys.argv)) log.info('*****app(%s) stoped', cmd) self.stop() #守护进程方式,重启服务 if self.restarted and hasattr(self, 'daemon_runner'): self.daemon_runner.domain_restart()
def test3(host, port): """ 物品合成测试 """ addr = (host, int(port)) #name, pwd, UDID, DT = 'abc1', 'abc1', "ABC", "ABC" #name, pwd, UDID, DT = '15467203', '', "2e745448eddfecae048f2230123cb51c", "9117f7216960f32d435dfca2685dae2a" name, pwd, UDID, DT = '15631365', '', "9236ecaad32f4081533b469232f70037", "7156e592284b695b82ed98dc44bad61d" #用户登录 player = login(addr, name, pwd, UDID, DT, name) #武器升级测试(测试大于一定等级时取回技能) #test_arm(player, 1) #player.game_master.clear_player() #时光盒 #tbox_test(player) #world_boss_notice(player) #world_boss_teset(player) #awar_test1(player) #awar_test2(player) awar_test4(player) sleep(1) player.logout() sleep(0.2) player.client.close()
def _check_loop(self): """ 检查 """ pass_time = 60 while 1: spawn(self._check_set) sleep(pass_time) self._log_info(pass_time)
def _copy_reward(self): """ 击打隐分身最终的大奖励 """ res_strong_map = Game.res_mgr.awar_strong_maps.get(self.war_node) for pid in self.war_data.war_pids: rpc_player = Game.rpc_player_mgr.get_rpc_player(pid) rpc_player.awar_copy_reward(res_strong_map.rid) sleep(2)
def loop(self): """ 处理bot """ while not self.stoped: times = random.randint(self.TIMES/2, self.TIMES) sleep(times) for bot in self.bots.values(): bot.update() sleep(1)
def manage_loop(self, msgs, times, interval): while not self.stoped: #log.debug('manage_loop :%s %s', times, interval) if times <= 0: break times -= 1 self.send(msgs) sleep(interval)
def _on_client_accept(self, sock, addr): """ 处理玩家登陆请求 """ log.debug(u'client发起连接(%s)', addr) _rpc = ClientRpc(sock, addr, self) _rpc.call_link_rpc = True _rpc.start() sleep(120) _rpc.stop()#该链接只用于登录接口,之后断开
def _loop(self): """ 管理游戏逻辑进程,维持合理的进程数量 """ while not self.stoped: try: self._check_apps() self.logic_mgr.check() except: log.log_except() sleep(10)
def _move(self, pids): """ 移动 """ while True: for pid in pids: #npc_pos = self.rfeatch_pos(NPC_POS_INDEX) pos = self.get_ran_pos() self.player_move(pid, pos) sleep(0.5) sleep(10)
def test_m_social1(player1): #test_socialGetInfo(player1, 1, 1) #test_socialEnter(player1) #test_addFriend(player1, 2518) #test_delFriend(player1, 2518) #test_addBlack(player1, 2518) #test_delBlack(player1, 2518) from corelib import sleep sleep(200)
def _loop_war(self): """ 开战计时 """ while 1: now_time = common.current_time() use_time = now_time - self.war_data.stime if use_time > self.war_per_config.wtime + self.boat.gtime: self.war_result_borad(ALLY_WAR_FAIL_TIME) break sleep(1)
def _loop(self): while 1: sleep(config.report_times) try: self.update_report() except socket.error as err: log.warn('socket error:%s', err) except: log.log_except()
def _gc_big(self): """ 大数据优化 """ slice_count = 200 keys = self._times.keys() while keys: sub_keys, keys = keys[:slice_count], keys[slice_count:] times = [(self._times[key], key) for key in sub_keys if key in self._times] self._gc_simple(times) sleep(0.02)
def player_logon(self, pid): """ 玩家登陆,检测boss战是否已开启 并广播 """ sleep(10) if self.w_start_boss: self.w_start_boss.p_logon(pids=[pid]) aid = Game.rpc_ally_mgr.get_aid_by_pid(pid) if aid and aid in self.notices: boss_id = self.a_bosses.get(aid) a_boss = self.bosses.get(boss_id) a_boss.p_logon(pids=[pid])
def _gc_big(self): """ 大数据优化 """ slice_count = 200 keys = self._times.keys() while keys: sub_keys, keys = keys[:slice_count], keys[slice_count:] times = [(self._times[key], key) for key in sub_keys if key in self._times] self._gc_simple(times) sleep(0.02)
def player_logon(self, pid): """ 玩家登陆,检测boss战是否已开启 并广播 """ sleep(10) if self.w_start_boss: self.w_start_boss.p_logon(pids=[pid]) aid = Game.rpc_ally_mgr.get_aid_by_pid(pid) if aid and aid in self.notices: boss_id = self.a_bosses.get(aid) a_boss = self.bosses.get(boss_id) a_boss.p_logon(pids=[pid])
def testMining(player): test_mining_enter(player) #test_mining_once(player) #test_mining_batch(player) #test_mining_vip_once(player) #test_mining_vip_batch(player) #test_mining_free_once(player) #test_mining_free_batch(player) from corelib import sleep sleep(320)
def _wait_game_stop(self): """ 功能进程,需等待逻辑进程全部关闭 """ from game import Game if Game.instance is not None: return with Timeout.start_new(60*1): while 1: if not len(Game.valid_games()): break sleep(0.2)
def test_deep(player): log(player.deep.enter(0)) #print player.deep.auto() #sleep(100) #log(player.deep.fight(1)) #log(player.deep.enter(1)) #log(player.deep.box()) #log(player.deep.enter(0)) from corelib import sleep sleep(200)
def test_copy(host, port): """ 第一章所有任务完成累计经验的测试 """ addr = (host, int(port)) name, pwd, UDID, DT = 'ab10', 'abc1', "ABC", "ABC" #用户登录 player = login(addr, name, pwd, UDID, DT, name) sleep(1) player.logout() sleep(22) player.client.close()
def test_task(player): player.tasks.tasks = [] player.game_master.accept_tasks() for i in xrange(5): sleep(0.5) if not player.tasks.tasks: continue task = player.tasks.tasks[0] player.tasks.complete(task['id']) return
def loop(self): """ 定时获取排名数据 """ level_rank = RankData() cbe_rank = RankData() while 1: level_rank.init() cbe_rank.init() spawn(self.loop_data, level_rank, cbe_rank) spawn(self.save) sleep(RESET_LOAD_TIME)
def auto_choose_node(self): """ 时间到自动选择路线 """ n = 0 while not self.is_choose: sleep(1) n += 1 if n > self.fetch_choose_time : log.debug('time out !! %s, %s, %s', self.room.pids, self.is_choose, n) war_node = self.group.auto_choose(self.war_node) self.choose_node(war_node, NODE_TYPE_MONSTER) break
def _loop(self): import app game = Game.instance while not app.stoped: sleep(self.BROADCAST_TIMES) if game and not game.stoped: self.all_ids = set(game.player_mgr.players.keys()) try: self.broadcast() except: log.log_except()
def _test_boss(name): print 'name --- %s', name player = enter(name, host, port) player.valid_gm() log.debug(u'玩家(%s)进入', name) while 1: player.boss.boss_enter() player.boss.boss_start() hurt = random.choice(hit_hp) player.boss.boss_finish(hurt) sleep(10)
def _loop(self): import app game = Game.instance while not app.stoped: sleep(self.BROADCAST_TIMES) if game and not game.stoped: self.all_ids = set(game.player_mgr.players.keys()) try: self.broadcast() except: log.log_except()
def _clear_sit(self): """ 清楚打坐状态 """ if not self.sit_pids: return for pid in self.sit_pids: if pid not in self.bot_mgr.player_infos: continue base_info = self.bot_mgr.player_infos[pid] base_info[IF_IDX_STATE] = STATE_NORMAL self.update_item(pid, base_info) self.sit_pids = [] sleep(1)
def test2(host, port): addr = (host, int(port)) name, pwd, UDID, DT = 'abc2', 'abc1', "ABC", "ABC" #用户登陆 player = login(addr, name, pwd, UDID, DT, name) print '-------------' #装备等级转移的测试 #equip_move_test(player) #合并命格 #merge_fate_test(player, 0) #猎命测试 #hit_fate_test(player, 1, isBatch=0) #祭天测试 #fete_test(player, 2) #兵符任务测试 #bf_task_test(player) #物品合成 #merge_items_test(player) #时光盒 #tbox_test(player) #打坐测试 #sit_test(player) #boss战 #同盟 #ally_boss_test(player) #世界 #world_boss_teset(player) #world_boss_notice(player) import rank rs = rank.test_rankEnter(player, 5, 1) print 'rs----rank --- %s', rs #player.game_master.reward(100002) #获取玩家物品 #print '-------------' #playIlist = player.bag.bag_get_ilist() #print playIlist sleep(100) #sleep(1) player.logout() sleep(0.2) player.client.close()
def sit_test(player): """ 打坐测试 """ #上线获取打坐数据 rs = player.sit.online_sit() print "online_sit-rs -------------", rs #开始打坐 player.sit.stop_sit() rs = player.sit.start_sit() print "start_sit-rs -------------", rs sleep(21) #rs = player.sit.stop_sit() print 'stop_sit-rs -------------', rs
def add_exps(host, port): """ 第一章所有任务完成累计经验的测试 """ addr = (host, int(port)) name, pwd, UDID, DT = 'ab10', 'abc1', "ABC", "ABC" #用户登录 player = login(addr, name, pwd, UDID, DT, name) test_tasks(player) sleep(1) player.logout() sleep(0.2) player.client.close()
def sit_test(player): """ 打坐测试 """ #上线获取打坐数据 rs = player.sit.online_sit() print "online_sit-rs -------------", rs #开始打坐 player.sit.stop_sit() rs = player.sit.start_sit() print "start_sit-rs -------------", rs sleep(21) #rs = player.sit.stop_sit() print 'stop_sit-rs -------------', rs
def _cmd_test_notify(app, *args): from corelib import sleep from webapi.notify import NotifyServer import config pem_data = """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""" token_see = '8845eae1bc0dfa069aec58a224623814f13ceb4794877a100e14a5bb1649681d' token_tiger = '94e9f4f87b0732e6a48c66f9d51d0d62157f993155f2976f1533282645e4b0de' svr = NotifyServer() svr.start_apns(pem_data, config.cfg_path, sandbox=0) svr.send_apns_msg(token_see, u'返屋企啦1111!') # svr.send_apns_msg(token_see, u'返屋企啦22222!') sleep(20)
def auto_choose_node(self): """ 时间到自动选择路线 """ n = 0 while not self.is_choose: sleep(1) n += 1 if n > self.fetch_choose_time: log.debug('time out !! %s, %s, %s', self.room.pids, self.is_choose, n) war_node = self.group.auto_choose(self.war_node) self.choose_node(war_node, NODE_TYPE_MONSTER) break
def close_handler(self): """ player主动调用,先关闭接口,再处理别的,注意不调用会内存泄漏 """ global _locks try: self.active = False for i in xrange(self._close_count): if not _locks[self]: break sleep(self._close_i) except: log.log_except() finally: _locks.pop(self, None)
def _loop_war(self): """ 活动开启提前通知 """ while 1: now_sec = common.current_time() - common.zero_day_time() #开启的活动结束 if self.warstart_config and now_sec > self.warstart_config.etime: if self.time_start(): #本次开启活动时清楚上一次的数据 self.stop_activity() #未开启活动时 elif self.warstart_config is None: self.time_start() sleep(1)
def _loop(self): """ 定时判断资源库版本号,更新资源 """ import app while not app.stoped: sleep(30) db_ver = self._get_db_ver() if db_ver != self.db_ver: log.warn(u'更新资源库(%s)', db_ver) if self.load(app): log.warn(u'更新资源库(%s)完成', db_ver) self.pub(MSG_RES_RELOAD) else: log.warn(u'更新资源库(%s)失败', db_ver)
def _loop_broad(self): """ 数据广播 """ #开战及时 while not self.war_data.war_end: desc = self.handle_connon() if desc: self._boss_hp_broad(desc) is_pass = self.is_pass_scene() if is_pass: self.pass_scene(self.room.aid) if self.war_data.boss_hp <= 0: break sleep(1)
def _loop_war(self): """ 开战计时 """ is_use_boattime = False while 1: now_time = common.current_time() use_time = now_time - self.war_data.stime if use_time > self.war_per_config.wtime + self.boat.gtime: self.war_result_borad(ALLY_WAR_FAIL_TIME) break elif not is_use_boattime and use_time > self.war_per_config.wtime: is_use_boattime = True self.record_uboattimes() sleep(1)
def report(): try: import app except ImportError: return st = 30 * 60 m = Monitor.instance() while not app.stoped: data = m.pop_report() for fn, (t, total, use, err) in data.iteritems(): Game.glog.log_rpc( dict(func=fn, t=t, total=total, use=use, err=err)) sleep(st)
def boss_hurt_boat(self): """ boss袭击天舟 """ sc, hurt = common.str2list(self.war_per_config.hurts, vtype=str) sc = int(sc) n = 1 sleep(sc) while self.war_data.boss_hp > 0 and not self.war_data.war_end: boss_data = eval(hurt) n += 1 self.boat.hard -= boss_data if self.boat.hard < 0: self.boat.hard = 0 self.boat.hard_broad(boss_data=boss_data) sleep(sc)
def _auto_start(self): global arena_auto_start, arena_level sleep_times = 60 * 5 log.info('arena auto_start(%s) running', arena_auto_start) while 1: sleep(sleep_times) c = PlayerData.count({FN_PLAYER_LEVEL: {FOP_GTE: arena_level}}) if c >= arena_auto_start: log.info('arena auto start:%d', c) self.init() self.is_start = True self.start() self._auto_start_task = None return
def start_broad(self, pid=0): """ 开战或进入下一场广播 """ resp_f = 'awarStartB' if self.war_data: self.enter_next_scene() else: self.data_init() self.war_data.start() self._loop_task_broad = spawn(self._loop_broad) sleep(1) for pid in self.war_data.war_pids: data = self.pack_data(pid) self.send_msg(resp_f, data, send_pids=[pid]) spawn(self._loop_war)
def online_sit(self): """ 上线获取打坐数据 """ if self.online_rs is None: sleep(5) self.online_add_sitexp() if self.online_rs is None: return False, None data = self.online_rs if data.has_key('canSitTime'): #继续打坐 self._online_start_sit(self.fetch_time_max - data['canSitTime']) data['addExp'] = self.sit_data[SIT_EXP] data['exp'] = self.player.data.exp return True, data
def _set_data(func, args, kw): self.set_count += 1 self.set_step_count += 1 while 1: try: return func(*args, **kw) except ConnectionError as e: #链接错误,尝试重新保存,保证数据安全 log.error('_process_set error:%s, will retry:%s', e, (func, args, kw)) except: log.log_except('_process_set:%s', (func, args, kw)) break sleep(0.1)
def _sit(self): """ 打坐 """ if not self.sit_pids: return _, rs = Game.rpc_player_mgr.get_player_infos(self.sit_pids) for index, pid in enumerate(self.sit_pids): player_info = rs[pid] if player_info[2]: continue base_info = self.bot_mgr.player_infos[pid] self._move_to(pid) sleep(10) base_info[IF_IDX_STATE] = STATE_SIT self.update_item(pid, base_info)
def _loop(self): """ 定时保存等处理 """ stime = 30 while 1: sleep(stime) try: for pid in self.players.keys(): p = self.players.get(pid) if p is None or not p.logined: continue #是否需要定时保存 if p.save_time + self._SAVE_TIME_ <= time.time(): p.save() except: log.log_except()
def test_m_social(player1, player2): #test_socialGetInfo(player1, 1, 1) test_changeName(player1, u"改变名字") #test_socialGetInfo(player2, 1, 1) #test_socialEnter(player1) #test_socialEnter(player2) #test_delBlack(player1, 2518) #test_addBlack_name(player1, u"怀禹晨") #test_addBlack_name(player1, u"怀禹晨") #test_addBlack_name(player1, u"怀禹晨") #test_delFriend(player1, 2518) #test_addFriend(player1, 2518) #test_addBlack(player1, 2518) from corelib import sleep sleep(200)
def _stop_func(): try: self._stop() except StandardError: log.log_except() for mgr in self.stop_mgrs: try: mgr.stop() except StandardError as e: log.log_except('stop mgr(%s) error:%s', mgr, e) sleep(0.5) #允许其它线程切换 #等待其它完成 while self.stop_lock.wait() < self.lock_count: sleep(0.1)
def refurbish_glory(self): def _sort(_id): if _id not in self.assist_objs: return 0 _obj = self.assist_objs[_id] return -_obj.data.glory while 1: self._glorys.sort(key=_sort) for pid in self._glorys: _obj = self.assist_objs.get(pid) if not _obj: continue self._mgr.set_glory_rank(pid, _obj.data.glory) sleep(Ally.GLORY_SORT_TIME)
def test_mail(player): pid = 0 #1189 if not pid: pid = player.id items = [dict(t='i', i=1, c=1000), dict(t='i', i=38, c=2)] player.game_master.send_mails(pid, MAIL_NORMAL, u'标题', u'内容', items) player.game_master.send_mails(pid, MAIL_REWARD, u'奖励', u'内容', items) #player.game_master.send_mails(pid, MAIL_BATTLE, u'奖励', u'内容', items) mail = player.mail for i in xrange(120): sleep(0.5) if mail.count >= 2: break for mid in mail.mails.keys(): mail.receive(mid)
def _loop(self): """ 定时检查购买支付情况 """ log.info('vip_pay_back start') querys = dict(sid=self.sid, dt=0, status=1, torder={FOP_NE:''}) while 1: sleep(5) try: pays = self.pay_store.query_loads(Pay.TABLE_NAME, querys) for pay in pays: try: self._pay_back(pay) except: log.log_except() except: log.log_except()
def gm_finish_achi(self, t, aid, pids): """完成成就 t='day' 每日 t='ever' 永久 aid成就id pids玩家列表""" i = 0 n = 10 for pid in pids: player = Game.rpc_player_mgr.get_rpc_player(pid) if player is None: offline = True player = Player.load_player(pid) if player is None: continue player.gm_finish_achi(t, aid) if offline: player.save() i += 1 if i % n == 0: sleep(0)
def loop_data_cbe(self, cbe_rank): """ 战斗力排名数据载入 """ while 1: cbe_fields = [CONST_PID, CONST_CBE] cbe_sort_by = [(CONST_CBE, DESCENDING)] cbe_list = cbe_rank.query(TN_P_ATTR, cbe_fields, limit=TIMES_NUMS, sort_by=cbe_sort_by, rpc=CONST_RPC_STORE) player_fields = [CONST_NAME, CONST_LEVEL, CONST_RID] cbe_rank.queryByList(cbe_list, CONST_PID, TN_PLAYER, player_fields, rpc=CONST_RPC_STORE) del_key_list = [CONST_ID] cbe_rank.getRet(cbe_list, CONST_PID, del_key_list, type=RANK_CBE) sleep(0.1) if not cbe_rank.is_next: self.player_cbe_data = cbe_rank.data log.debug("rank--load--data--cbe") break