package com.pcee.architecture.sessionmodule.statemachine; import java.util.Timer; import com.pcee.architecture.ModuleEnum; import com.pcee.architecture.ModuleManagement; import com.pcee.protocol.message.PCEPMessage; import com.pcee.protocol.message.PCEPMessageAnalyser; import com.pcee.protocol.message.objectframe.impl.erosubobjects.PCEPAddress; public class StateMachineServerImpl extends StateMachineImpl{ public StateMachineServerImpl(ModuleManagement layerManagement, PCEPAddress Address, Timer stateTimer, boolean connectionInitialized) { super(layerManagement, Address, stateTimer, connectionInitialized); } @Override public void updateState(PCEPMessage message, ModuleEnum sourceModule) { logger.debug("Entering: updateState(PCEPMessage message, ModuleEnum targetLayer)"); logger.debug("| message: " + message.contentInformation()); switch (state) { case 0: { enterIdleState(); break; } case 1: { // enterTCPPendingState(); logger.info("You should not see me!"); System.out.println("Message Arrived Before State Was Updated"); break; } case 2: { enterOpenWaitState(message); break; } case 3: { enterKeepWaitState(message); break; } case 4: { enterSessionUPState(message, sourceModule); break; } default: { logger.info("Lost in a completely not reachable state. wtf?"); } } } private void enterSessionUPState(PCEPMessage message, ModuleEnum sourceModule) { logger.debug("Entering: enterSessionUPState(PCEPMessage message)"); logger.debug("| message: " + message.contentInformation()); // System.out.println("[StateMachine: " + address.getAddress() + // "] entering Session up State" ); // flushBuffer(); boolean noErrorsDetected = PCEPMessageAnalyser .checkMessageFormat(message); if (noErrorsDetected == false) { logger.info("Message Format Error detected"); sendCloseMessage(); // releaseResources(); closeTCPConnection(); } this.checkMultipleConnections(); logger.debug("Entering: analyzeMessage(PCEPMessage message)"); int messageType = message.getMessageHeader().getTypeDecimalValue(); switch (messageType) { case 1: { logger.info("Received Open Message"); logger.info("Waiting to be implemented. Do something with this Message!"); break; } case 2: { logger.info("Received KeepAlive Message"); restartDeadTimer(); logger.info("Processing Information: " + message.contentInformation()); break; } case 3: { logger.info("Received Path Computation Request Message"); // System.out.println("Received Path Computation Request Message"); restartDeadTimer(); if (sourceModule.compareTo(ModuleEnum.NETWORK_MODULE) == 0) { lm.getSessionModule().sendMessage(message, ModuleEnum.COMPUTATION_MODULE); } else { logger.info("Server State Machine should not receive Path Computation Requests from any module other than Network"); } break; } case 4: { logger.info("Received Path Computation Response Message"); restartDeadTimer(); // MessageHandler.readResponseMessage(message); if (sourceModule.compareTo(ModuleEnum.COMPUTATION_MODULE) == 0) { lm.getSessionModule().sendMessage(message, ModuleEnum.NETWORK_MODULE); } else { logger.info("Server State Machine should not receive Path Computation Responses from any module other than Computation Module"); } break; } case 5: { logger.info("Received Notification Message"); break; } case 6: { logger.info("Received Error Message"); break; } case 7: { logger.info("Received Close Message"); this.closeTCPConnection(); break; } default: { logger.info("ERROR: Unkown Message"); break; } } } }