public ControlledFragmentHandlerAction OnFragment(IDirectBuffer buffer, int offset, int length, Header header) { messageHeaderDecoder.Wrap(buffer, offset); int templateId = messageHeaderDecoder.TemplateId(); if (templateId == SessionHeaderDecoder.TEMPLATE_ID) { sessionHeaderDecoder.Wrap( buffer, offset + MessageHeaderDecoder.ENCODED_LENGTH, messageHeaderDecoder.BlockLength(), messageHeaderDecoder.Version()); agent.OnSessionMessage( sessionHeaderDecoder.ClusterSessionId(), sessionHeaderDecoder.Timestamp(), buffer, offset + SESSION_HEADER_LENGTH, length - SESSION_HEADER_LENGTH, header); return(ControlledFragmentHandlerAction.CONTINUE); } switch (templateId) { case TimerEventDecoder.TEMPLATE_ID: timerEventDecoder.Wrap( buffer, offset + MessageHeaderDecoder.ENCODED_LENGTH, messageHeaderDecoder.BlockLength(), messageHeaderDecoder.Version()); agent.OnTimerEvent(timerEventDecoder.CorrelationId(), timerEventDecoder.Timestamp()); break; case SessionOpenEventDecoder.TEMPLATE_ID: openEventDecoder.Wrap( buffer, offset + MessageHeaderDecoder.ENCODED_LENGTH, messageHeaderDecoder.BlockLength(), messageHeaderDecoder.Version()); string responseChannel = openEventDecoder.ResponseChannel(); byte[] encodedPrincipal = new byte[openEventDecoder.EncodedPrincipalLength()]; openEventDecoder.GetEncodedPrincipal(encodedPrincipal, 0, encodedPrincipal.Length); agent.OnSessionOpen( openEventDecoder.ClusterSessionId(), openEventDecoder.Timestamp(), openEventDecoder.ResponseStreamId(), responseChannel, encodedPrincipal); break; case SessionCloseEventDecoder.TEMPLATE_ID: closeEventDecoder.Wrap( buffer, offset + MessageHeaderDecoder.ENCODED_LENGTH, messageHeaderDecoder.BlockLength(), messageHeaderDecoder.Version()); agent.OnSessionClose( closeEventDecoder.ClusterSessionId(), closeEventDecoder.Timestamp(), closeEventDecoder.CloseReason()); break; case ClusterActionRequestDecoder.TEMPLATE_ID: actionRequestDecoder.Wrap( buffer, offset + MessageHeaderDecoder.ENCODED_LENGTH, messageHeaderDecoder.BlockLength(), messageHeaderDecoder.Version()); agent.OnServiceAction( actionRequestDecoder.LogPosition(), actionRequestDecoder.LeadershipTermId(), actionRequestDecoder.Timestamp(), actionRequestDecoder.Action()); break; case NewLeadershipTermEventDecoder.TEMPLATE_ID: newLeadershipTermEventDecoder.Wrap( buffer, offset + MessageHeaderDecoder.ENCODED_LENGTH, messageHeaderDecoder.BlockLength(), messageHeaderDecoder.Version()); agent.OnNewLeadershipTermEvent( newLeadershipTermEventDecoder.LeadershipTermId(), newLeadershipTermEventDecoder.LogPosition(), newLeadershipTermEventDecoder.Timestamp(), newLeadershipTermEventDecoder.LeaderMemberId(), newLeadershipTermEventDecoder.LogSessionId()); break; case ClusterChangeEventDecoder.TEMPLATE_ID: clusterChangeEventDecoder.Wrap( buffer, offset + MessageHeaderDecoder.ENCODED_LENGTH, messageHeaderDecoder.BlockLength(), messageHeaderDecoder.Version() ); agent.OnClusterChange( clusterChangeEventDecoder.LeadershipTermId(), clusterChangeEventDecoder.LogPosition(), clusterChangeEventDecoder.Timestamp(), clusterChangeEventDecoder.LeaderMemberId(), clusterChangeEventDecoder.ClusterSize(), clusterChangeEventDecoder.EventType(), clusterChangeEventDecoder.MemberId(), clusterChangeEventDecoder.ClusterMembers()); break; } return(ControlledFragmentHandlerAction.CONTINUE); }