public void Handle(NetMQFrame[] sender, NetMQMessage message) { Logger.Debug("[Queue_AcknowledgeHandler] Received an ack."); var requestId = message.Pop(); var context = message.Pop().ConvertToString(); var queueId = message.Pop().ConvertToString(); var subscriberId = message.Pop().ConvertToString(); var allocationId = message.PopNullableInt64(); var allocationSize = message.PopInt32(); var allocationTimeInMilliseconds = message.PopInt32(); var ack = new AcknowledgeQueue(context, queueId, subscriberId, allocationId, allocationSize, allocationTimeInMilliseconds); var queuedEvents = _storage.AcknowledgeAndFetchNext(ack); var events = queuedEvents.Events; var msg = new NetMQMessage(); msg.Append(sender); msg.AppendEmptyFrame(); msg.Append(ResProtocol.ResClient01); msg.Append(requestId); msg.Append(ResCommands.QueuedEvents); msg.Append(context); msg.Append(queueId); msg.Append(subscriberId); msg.Append(DateTime.UtcNow.ToNetMqFrame()); msg.Append(queuedEvents.AllocationId.ToNetMqFrame()); var count = events.Length; msg.Append(count.ToNetMqFrame()); foreach (var e in events) { msg.Append(e.EventId.ToByteArray()); msg.Append(e.Stream); msg.Append(e.Context); msg.Append(e.Sequence.ToNetMqFrame()); msg.Append(e.Timestamp.ToNetMqFrame()); msg.Append(e.TypeKey); msg.Append(e.Headers.ToNetMqFrame()); msg.Append(e.Body); } var result = new QueuedMessagesFetched(msg); while (!_outBuffer.Offer(result)) _spin.SpinOnce(); }
public void Handle(NetMQFrame[] sender, NetMQMessage message) { Logger.Debug("[Query_LoadEventsByStream] Received a request."); var requestId = message.Pop(); var context = message.Pop().ConvertToString(); var stream = message.Pop().ConvertToString(); var fromVersion = message.PopInt64(); var maxVersion = message.PopNullableInt64(); var events = _storage.LoadEventsForStream(context, stream, fromVersion, maxVersion); var msg = new NetMQMessage(); msg.Append(sender); msg.AppendEmptyFrame(); msg.Append(ResProtocol.ResClient01); msg.Append(requestId); msg.Append(ResCommands.QueryEventsByStreamResponse); var count = events.Length; msg.Append(count.ToNetMqFrame()); foreach (var e in events) { msg.Append(e.EventId.ToByteArray()); msg.Append(e.Stream); msg.Append(e.Context); msg.Append(e.Sequence.ToNetMqFrame()); msg.Append(e.Timestamp.ToNetMqFrame()); msg.Append(e.TypeKey); msg.Append(e.Headers.ToNetMqFrame()); msg.Append(e.Body); } var result = new QueryEventsForStreamLoaded(msg); while (!_buffer.Offer(result)) _spin.SpinOnce(); }