private CommitForStorage getCommit(NetMQMessage message) { var context = message.Pop().ConvertToString(); var stream = message.Pop().ConvertToString(); var expectedVersion = message.PopInt64(); var eventCount = message.PopInt32(); var events = new EventForStorage[eventCount]; for (int i = 0; i < eventCount; i++) { var eventId = new Guid(message.Pop().ToByteArray()); var timestamp = message.PopDateTime(); var typeKey = message.PopString(); var headers = message.PopStringOrNull(); var body = message.PopString(); //-1 to override concurrency check. Being lazy and not using a constant. var version = expectedVersion == -1 ? -1 : expectedVersion + i; events[i] = new EventForStorage(eventId, version, timestamp, typeKey, headers, body); } return new CommitForStorage(context, stream, events); }
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(); }