public void OnFragment(IDirectBuffer buffer, int offset, int length, Header header) { messageHeaderDecoder.Wrap(buffer, offset); int schemaId = messageHeaderDecoder.SchemaId(); if (schemaId != MessageHeaderDecoder.SCHEMA_ID) { throw new ClusterException("expected schemaId=" + MessageHeaderDecoder.SCHEMA_ID + ", actual=" + schemaId); } int templateId = messageHeaderDecoder.TemplateId(); switch (templateId) { case JoinLogDecoder.TEMPLATE_ID: joinLogDecoder.Wrap( buffer, offset + MessageHeaderDecoder.ENCODED_LENGTH, messageHeaderDecoder.BlockLength(), messageHeaderDecoder.Version()); clusteredServiceAgent.OnJoinLog( joinLogDecoder.LeadershipTermId(), joinLogDecoder.LogPosition(), joinLogDecoder.MaxLogPosition(), joinLogDecoder.MemberId(), joinLogDecoder.LogSessionId(), joinLogDecoder.LogStreamId(), joinLogDecoder.LogChannel()); break; case ServiceTerminationPositionDecoder.TEMPLATE_ID: serviceTerminationPositionDecoder.Wrap( buffer, offset + MessageHeaderDecoder.ENCODED_LENGTH, messageHeaderDecoder.BlockLength(), messageHeaderDecoder.Version()); clusteredServiceAgent.OnServiceTerminationPosition(serviceTerminationPositionDecoder.LogPosition()); break; case ElectionStartEventDecoder.TEMPLATE_ID: electionStartEventDecoder.Wrap( buffer, offset + MessageHeaderDecoder.ENCODED_LENGTH, messageHeaderDecoder.BlockLength(), messageHeaderDecoder.Version()); clusteredServiceAgent.OnElectionStartEvent(electionStartEventDecoder.LogPosition()); break; } }