Esempio n. 1
0
    def shutDown(self):
        """Shut down the monitoring thread.

        This is done in addition to the normal shutdown procedure.
        """
        self.deactivateAutoReload()
        AppServer.shutDown(self)
Esempio n. 2
0
    def shutDown(self):
        """Shut down the monitoring thread.

        This is done in addition to the normal shutdown procedure.
        """
        self.deactivateAutoReload()
        AppServer.shutDown(self)
Esempio n. 3
0
    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()
Esempio n. 5
0
 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 __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)
Esempio n. 8
0
 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 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
Esempio n. 10
0
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]--------------------------------------------------------------------------------------------------------------------'
    )
Esempio n. 11
0
 def __init__(self, path=None):
     AppServer.__init__(self, path)
     self.readyForRequests()
Esempio n. 12
0
 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
Esempio n. 15
0
    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