def shutDown(self): """Shut down the monitoring thread. This is done in addition to the normal shutdown procedure. """ self.deactivateAutoReload() AppServer.shutDown(self)
def _execute(self): # リクエストパラメーターチェック packet = PacketWatch(self._data) if packet.is_validate_hash() == False: return False app_instance = AppServer() war_id = int(packet.war_id) user_id = int(packet.user_id) team_id = int(packet.team_id) enemy_team_id = int(packet.enemy_team_id) # このsocket_handlerがws_clientに登録されているかチェック is_reconnect = True ws_client_list = app_instance.get_ws_client(war_id) for client in ws_client_list: if client._user_id == user_id and client._war_id == war_id: is_reconnect = False break if is_reconnect: redis_war_data = RedisWarData() redis_war_data.exit_war(war_id, user_id, enemy_team_id, options.redis_war_data_expire) return False # 続けてPacketTimeHandlerで時間切れ確認 packet_time_handler = PacketTimeHandler(self._socket_handler, self._data) return packet_time_handler.execute()
def __init__(self, path=None): AppServer.__init__(self, path) self._autoReload = 0 self._shouldRestart = 0 self._requests = [] self._pipe = None if self.isPersistent(): if self.setting('AutoReload'): self.activateAutoReload()
def __init__(self, path=None): """Activate AutoReloading.""" self._shouldRestart = False self._fileMonitorThread = None AppServer.__init__(self, path) try: if self.isPersistent() and self.setting('AutoReload'): self.activateAutoReload() except: AppServer.initiateShutdown(self) raise
def __regist_ws_client(self, data, enemy_team_id, war_start_time, war_end_time): app_instance = AppServer() # SocketHandler にユーザー情報を追加してAppServerに登録 self._socket_handler._user_id = int(data.user_id) self._socket_handler._user_name = data.user_name self._socket_handler._team_id = int(data.team_id) self._socket_handler._enemy_team_id = int(enemy_team_id) self._socket_handler._war_id = int(data.war_id) self._socket_handler._war_start_time= int(war_start_time) self._socket_handler._war_end_time = int(war_end_time) app_instance.regist_ws_client(int(data.war_id), self._socket_handler)
def defaultConfig(self): """Return the default configuration.""" conf = AppServer.defaultConfig(self) # Update with AutoReloadingAppServer specific settings # as defined in defaultConfig on the module level: conf.update(defaultConfig) return conf
def main(): logging.info( '[app-server start]--------------------------------------------------------------------------------------------------------------------' ) try: # サーバー起動 app = AppServer() app.start_server() except Exception as e: # サーバーアプリケーションエラー import traceback logging.error(e.message) logging.error(traceback.format_exc()) logging.info( '[app-server stop]--------------------------------------------------------------------------------------------------------------------' )
def __init__(self, path=None): AppServer.__init__(self, path) self.readyForRequests()
def shutDown(self): print 'Stopping AutoReload Monitor' sys.stdout.flush() self._shuttingDown = 1 self.deactivateAutoReload() AppServer.shutDown(self)
def defaultConfig(self): conf = AppServer.defaultConfig(self) conf.update(DefaultConfig) return conf
def _execute(self): # リクエストパラメーターチェック packet = PacketItem(self._data) if not packet.is_validate_hash(): return False # アイテム使用以外のアクションが来た場合は不正パケットとみなす if packet.item_category not in (ActionType.use_item_hp_heal, ActionType.use_item_dead_heal, ActionType.use_item_skill_heal): return False user_id = self._socket_handler._user_id war_id = self._socket_handler._war_id team_id = self._socket_handler._team_id enemy_team_id = self._socket_handler._enemy_team_id item_id = int(packet.item_id) redis_user = RedisUserData() app_instance = AppServer() db_master = app_instance.get_db_connection('master') cur_master = db_master.cursor() db_log = app_instance.get_db_connection('log') cur_log = db_log.cursor() user_data_model = UserDataModel(cur_master) item_log_model = ItemHistoryModel(cur_log) # アイテム所持数管理 possession_item_list = user_data_model.get_consumption_item(user_id) item_manager = ItemUseManager(possession_item_list, packet.item_category, packet.item_id) # アイテムを所持していない場合は処理終了 item_num_ok = item_manager.is_enable_consumption_item_quantity() use_item_id = item_manager.get_use_item_id() heal_effect = item_manager.get_heal_effect() rest_hp = 0 heal_value = 0 res_status = '' # アイテムの使用状況情報を取得 item_use_info_list = redis_user.get_item_data_info( war_id, team_id, user_id) item_use_info = item_use_info_list[int(packet.item_id)] item_use_num = int(item_use_info['use_num']) if int(item_use_info['use_num_limit']) - int( item_use_info['use_num']) <= 0: res_status = 'limit' if res_status == '': if item_num_ok: #### todo:: アイテム効果発動処理(redis) is_dead確認後、問題なければ使用 redis_result_data = redis_user.use_item( war_id, team_id, user_id, packet.item_category, use_item_id, item_id, packet.target_id, heal_effect) res_status = redis_result_data['status'] if res_status == 'ok': rest_hp = int(redis_result_data['rest_hp']) heal_value = int(redis_result_data['heal_value']) item_use_num = item_use_num + 1 else: res_status = 'lack' # 返却データ作成 use_item_result_data = { 'res': res_status, # 結果('ok':成功, 'dead':気絶中のため失敗) 'team_id': team_id, 'user_id': user_id, 'item_category': packet.item_category, 'item_id': use_item_id, 'item_count': item_manager.get_item_quantity(use_item_id) - 1, 'item_use_remain': int(item_use_info['use_num_limit']) - int(item_use_num), 'target_id': packet.target_id, 'value': heal_value, 'rest_hp': rest_hp, } if res_status == 'ok': # 返却データ送信 self._socket_handler.send_message({ 'war_id': war_id, 'team_id': team_id, 'item': use_item_result_data, }) self._socket_handler.send_message({ 'war_id': war_id, 'team_id': enemy_team_id, 'item': use_item_result_data, }) # DB更新処理で重そうなのでpacket飛ばした後に更新処理を行う user_data_model.use_consumption_item( user_id, item_manager.get_use_item_id()) item_log_model.add_data(user_id, use_item_id, -1) db_master.commit() db_log.commit() cur_master.close() cur_log.close() else: # アイテム使用失敗の旨を自分にのみ通知 self._socket_handler.send_message_to_myself({ 'war_id': war_id, 'team_id': team_id, 'item': use_item_result_data, }) cur_master.close() cur_log.close() return True