public byte[] encodeNextMessageToBeSent(CDAPMessage cdapMessage) throws CDAPException { CDAPMessageValidator.validate(cdapMessage); switch (cdapMessage.getOpCode()) { case M_CONNECT: connectionStateMachine.checkConnect(); break; case M_CONNECT_R: connectionStateMachine.checkConnectResponse(); break; case M_RELEASE: connectionStateMachine.checkRelease(); break; case M_RELEASE_R: connectionStateMachine.checkReleaseResponse(); break; case M_CREATE: checkIsConnected(); break; case M_CREATE_R: checkIsConnected(); break; case M_DELETE: checkIsConnected(); break; case M_DELETE_R: checkIsConnected(); break; case M_START: checkIsConnected(); break; case M_START_R: checkIsConnected(); break; case M_STOP: checkIsConnected(); break; case M_STOP_R: checkIsConnected(); break; case M_WRITE: checkIsConnected(); break; case M_WRITE_R: checkIsConnected(); break; case M_READ: checkIsConnected(); break; case M_READ_R: checkIsConnected(); break; case M_CANCELREAD: checkIsConnected(); ; break; case M_CANCELREAD_R: checkIsConnected(); break; default: throw new CDAPException( "Unrecognized operation code: " + cdapMessage.getOpCode().toString()); } return serializeMessage(cdapMessage); }