public static ValueTask HandleEventAsync(ClientMessage clientMessage, Func <IData, Guid, Guid, long, object, ValueTask> handleIMapInvalidationEventAsync, Func <IList <IData>, IList <Guid>, IList <Guid>, IList <long>, object, ValueTask> handleIMapBatchInvalidationEventAsync, object state, ILoggerFactory loggerFactory) { using var iterator = clientMessage.GetEnumerator(); var messageType = clientMessage.MessageType; if (messageType == EventIMapInvalidationMessageType) { var initialFrame = iterator.Take(); var sourceUuid = initialFrame.Bytes.ReadGuidL(EventIMapInvalidationSourceUuidFieldOffset); var partitionUuid = initialFrame.Bytes.ReadGuidL(EventIMapInvalidationPartitionUuidFieldOffset); var sequence = initialFrame.Bytes.ReadLongL(EventIMapInvalidationSequenceFieldOffset); var key = CodecUtil.DecodeNullable(iterator, DataCodec.Decode); return(handleIMapInvalidationEventAsync(key, sourceUuid, partitionUuid, sequence, state)); } if (messageType == EventIMapBatchInvalidationMessageType) { iterator.Take(); // empty initial frame var keys = ListMultiFrameCodec.Decode(iterator, DataCodec.Decode); var sourceUuids = ListUUIDCodec.Decode(iterator); var partitionUuids = ListUUIDCodec.Decode(iterator); var sequences = ListLongCodec.Decode(iterator); return(handleIMapBatchInvalidationEventAsync(keys, sourceUuids, partitionUuids, sequences, state)); } loggerFactory.CreateLogger(typeof(EventHandler)).LogDebug("Unknown message type received on event handler :" + messageType); return(default);
public static void HandleEvent(ClientMessage clientMessage, HandleIMapInvalidationEvent handleIMapInvalidationEvent, HandleIMapBatchInvalidationEvent handleIMapBatchInvalidationEvent) { var messageType = clientMessage.MessageType; var iterator = clientMessage.GetIterator(); if (messageType == EventIMapInvalidationMessageType) { var initialFrame = iterator.Next(); Guid sourceUuid = DecodeGuid(initialFrame.Content, EventIMapInvalidationSourceUuidFieldOffset); Guid partitionUuid = DecodeGuid(initialFrame.Content, EventIMapInvalidationPartitionUuidFieldOffset); long sequence = DecodeLong(initialFrame.Content, EventIMapInvalidationSequenceFieldOffset); IData key = CodecUtil.DecodeNullable(iterator, DataCodec.Decode); handleIMapInvalidationEvent(key, sourceUuid, partitionUuid, sequence); return; } if (messageType == EventIMapBatchInvalidationMessageType) { //empty initial frame iterator.Next(); IList <IData> keys = ListMultiFrameCodec.Decode(iterator, DataCodec.Decode); IList <Guid> sourceUuids = ListUUIDCodec.Decode(iterator); IList <Guid> partitionUuids = ListUUIDCodec.Decode(iterator); IList <long> sequences = ListLongCodec.Decode(iterator); handleIMapBatchInvalidationEvent(keys, sourceUuids, partitionUuids, sequences); return; } Logger.GetLogger(typeof(EventHandler)).Finest("Unknown message type received on event handler :" + messageType); }
public static ClientMessage EncodeIMapBatchInvalidationEvent(ICollection <IData> keys, ICollection <Guid> sourceUuids, ICollection <Guid> partitionUuids, ICollection <long> sequences) { var clientMessage = new ClientMessage(); var initialFrame = new Frame(new byte[EventIMapBatchInvalidationInitialFrameSize], (FrameFlags)ClientMessageFlags.Unfragmented); initialFrame.Bytes.WriteIntL(Messaging.FrameFields.Offset.MessageType, EventIMapBatchInvalidationMessageType); initialFrame.Bytes.WriteIntL(Messaging.FrameFields.Offset.PartitionId, -1); clientMessage.Append(initialFrame); clientMessage.Flags |= ClientMessageFlags.Event; ListMultiFrameCodec.Encode(clientMessage, keys, DataCodec.Encode); ListUUIDCodec.Encode(clientMessage, sourceUuids); ListUUIDCodec.Encode(clientMessage, partitionUuids); ListLongCodec.Encode(clientMessage, sequences); return(clientMessage); }