@Override
public void run(IRequest request, IResponse response, IResponderCallback responderCallback) throws SCMPCommandException {
SCMPMessage reqMessage = request.getMessage();
String serviceName = reqMessage.getServiceName();
// look up srvService
SrvPublishService srvService = this.getSrvPublishServiceByServiceName(serviceName);
String sessionId = reqMessage.getSessionId();
// create scMessage
SCSubscribeMessage scMessage = new SCSubscribeMessage();
scMessage.setData(reqMessage.getBody());
scMessage.setDataLength(reqMessage.getBodyLength());
scMessage.setCompressed(reqMessage.getHeaderFlag(SCMPHeaderAttributeKey.COMPRESSION));
scMessage.setMessageInfo(reqMessage.getHeader(SCMPHeaderAttributeKey.MSG_INFO));
scMessage.setSessionInfo(reqMessage.getHeader(SCMPHeaderAttributeKey.SESSION_INFO));
scMessage.setSessionId(sessionId);
scMessage.setMask(reqMessage.getHeader(SCMPHeaderAttributeKey.MASK));
scMessage.setServiceName(reqMessage.getServiceName());
scMessage.setActualMask(reqMessage.getHeader(SCMPHeaderAttributeKey.ACTUAL_MASK));
// inform callback with scMessages
SCMessage scReply = srvService.getCallback().changeSubscription(scMessage,
Integer.parseInt(reqMessage.getHeader(SCMPHeaderAttributeKey.OPERATION_TIMEOUT)));
// handling msgSequenceNr
SCMPMessageSequenceNr msgSequenceNr = SrvCommandAdapter.sessionCompositeRegistry.getSCMPMsgSequenceNr(reqMessage
.getSessionId());
msgSequenceNr.incrementAndGetMsgSequenceNr();