private boolean preHandleEvent(GameEvent event, GameSession session) { AbstractRequestHandler handler = null; switch ((GameCommandType) event.getKey()) { case START_GAME_REQUEST: handler = new StartGameRequestHandler(event, session); break; case CLEAN_DRAW_REQUEST: handler = new CleanDrawRequestHandler(event, session); break; case SEND_DRAW_DATA_REQUEST: handler = new DrawDataRequestHandler(event, session); break; case CHAT_REQUEST: handler = new ChatRequestHandler(event, session); break; default: return false; } if (handler == null) return false; try { handler.handleRequest(event.getMessage()); } catch (Exception e) { GameLog.error(event.getTargetSession(), e); } return true; }
@Override public void run() { logger.info("Thread " + threadHashKey + " is running..."); while (stopFlag.intValue() == 0) { GameEvent event = null; try { event = queue.take(); GameSession session = gameManager.findGameSessionById(event.getTargetSession()); if (session == null) { GameLog.warn( event.getTargetSession(), "process event " + event.getKey() + " but session id not found "); continue; } boolean skipEvent = preHandleEvent(event, session); if (skipEvent) { continue; } com.orange.common.statemachine.State nextState = stateMachine.nextState(session.getCurrentState(), event, session); if (nextState == null) { GameLog.warn( event.getTargetSession(), "process event " + event.getKey() + " but next state not found"); continue; } session.setCurrentState(nextState); /* GameSession session = gameManager.findGameSessionById(event.getTargetSession()); if (session == null){ // no session available for this event? GameLog.warn(event.getTargetSession(), "process event but session id not found "); HandlerUtils.sendErrorResponse(event, GameResultCode.ERROR_NO_SESSION_ID); continue; } if (session.getCurrentState().validateEvent(event, session) != 0){ // donnot send back request here since validate event will make it // argument, where to send the response??? continue; } com.orange.common.statemachine.State nextState = stateMachine.nextState(session.getCurrentState(), event, session); if (nextState == null){ // incorrect message event? HandlerUtils.sendErrorResponse(event, GameResultCode.ERROR_NEXT_STATE_NOT_FOUND); continue; } session.setCurrentState(nextState); */ } catch (Exception e) { logger.error("catch exception while handle event, exception = " + e.toString(), e); // rem by Benson for refactor // if (event != null){ // HandlerUtils.sendErrorResponse(event, GameResultCode.ERROR_SYSTEM_EXCEPTION); // } } } logger.info("Thread " + threadHashKey + " is stop..."); }