public void onMessage( final int msgTypeId, final MutableDirectBuffer buffer, final int index, final int length) { switch (msgTypeId) { case ON_PUBLICATION_READY: { publicationReady.wrap(buffer, index); final long correlationId = publicationReady.correlationId(); if (correlationId == activeCorrelationId) { listener.onNewPublication( expectedChannel, publicationReady.streamId(), publicationReady.sessionId(), publicationReady.publicationLimitCounterId(), publicationReady.logFileName(), correlationId); lastReceivedCorrelationId = correlationId; } break; } case ON_IMAGE_READY: { imageReady.wrap(buffer, index); for (int i = 0, max = imageReady.subscriberPositionCount(); i < max; i++) { final long registrationId = imageReady.positionIndicatorRegistrationId(i); final int positionId = imageReady.subscriberPositionId(i); subscriberPositionMap.put(registrationId, positionId); } listener.onNewImage( imageReady.streamId(), imageReady.sessionId(), imageReady.joiningPosition(), subscriberPositionMap, imageReady.logFileName(), imageReady.sourceIdentity(), imageReady.correlationId()); subscriberPositionMap.clear(); break; } case ON_OPERATION_SUCCESS: { correlatedMessage.wrap(buffer, index); final long correlationId = correlatedMessage.correlationId(); if (correlationId == activeCorrelationId) { lastReceivedCorrelationId = correlationId; } break; } case ON_INACTIVE_IMAGE: { imageMessage.wrap(buffer, index); listener.onInactiveImage( imageMessage.streamId(), imageMessage.sessionId(), imageMessage.position(), imageMessage.correlationId()); break; } case ON_ERROR: { errorResponse.wrap(buffer, index); final long correlationId = errorResponse.offendingCommandCorrelationId(); if (correlationId == activeCorrelationId) { listener.onError( errorResponse.errorCode(), errorResponse.errorMessage(), correlationId); lastReceivedCorrelationId = correlationId; } break; } } }