public ControlledFragmentHandlerAction OnFragment(IDirectBuffer buffer, int offset, int length, Header header) { messageHeaderDecoder.Wrap(buffer, offset); int templateId = messageHeaderDecoder.TemplateId(); int schemaId = messageHeaderDecoder.SchemaId(); if (schemaId != MessageHeaderDecoder.SCHEMA_ID) { throw new ClusterException("expected schemaId=" + MessageHeaderDecoder.SCHEMA_ID + ", actual=" + schemaId); } if (templateId == SessionMessageHeaderEncoder.TEMPLATE_ID) { sessionHeaderDecoder.Wrap( buffer, offset + MessageHeaderDecoder.ENCODED_LENGTH, messageHeaderDecoder.BlockLength(), messageHeaderDecoder.Version()); agent.OnSessionMessage( header.Position, 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( header.Position, 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.LeadershipTermId(), header.Position, 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.LeadershipTermId(), header.Position, 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.LeadershipTermId(), actionRequestDecoder.LogPosition(), actionRequestDecoder.Timestamp(), actionRequestDecoder.Action()); break; case NewLeadershipTermEventDecoder.TEMPLATE_ID: newLeadershipTermEventDecoder.Wrap( buffer, offset + MessageHeaderDecoder.ENCODED_LENGTH, messageHeaderDecoder.BlockLength(), messageHeaderDecoder.Version()); var clusterTimeUnit = newLeadershipTermEventDecoder.TimeUnit() == ClusterTimeUnit.NULL_VALUE ? ClusterTimeUnit.MILLIS : newLeadershipTermEventDecoder.TimeUnit(); agent.OnNewLeadershipTermEvent( newLeadershipTermEventDecoder.LeadershipTermId(), newLeadershipTermEventDecoder.LogPosition(), newLeadershipTermEventDecoder.Timestamp(), newLeadershipTermEventDecoder.TermBaseLogPosition(), newLeadershipTermEventDecoder.LeaderMemberId(), newLeadershipTermEventDecoder.LogSessionId(), clusterTimeUnit, newLeadershipTermEventDecoder.AppVersion() ); break; case MembershipChangeEventDecoder.TEMPLATE_ID: membershipChangeEventDecoder.Wrap( buffer, offset + MessageHeaderDecoder.ENCODED_LENGTH, messageHeaderDecoder.BlockLength(), messageHeaderDecoder.Version() ); agent.OnMembershipChange( membershipChangeEventDecoder.LeadershipTermId(), membershipChangeEventDecoder.LogPosition(), membershipChangeEventDecoder.Timestamp(), membershipChangeEventDecoder.LeaderMemberId(), membershipChangeEventDecoder.ClusterSize(), membershipChangeEventDecoder.ChangeType(), membershipChangeEventDecoder.MemberId(), membershipChangeEventDecoder.ClusterMembers()); break; } return(ControlledFragmentHandlerAction.CONTINUE); }