public Action<NetMQMessage> Send(NetMQSocket socket, PendingResRequest pendingRequest, Guid requestId) { var pending = (PendingResRequest<QueryEventsForStreamResponse>) pendingRequest; var msg = new NetMQMessage(); msg.AppendEmptyFrame(); msg.Append(ResProtocol.ResClient01); msg.Append(ResCommands.QueryEventsByStream); msg.Append(requestId.ToByteArray()); msg.Append(_context); msg.Append(_stream); msg.Append(_fromVersion.ToNetMqFrame()); msg.Append(_maxVersion.ToNetMqFrame()); socket.SendMultipartMessage(msg); return m => { var command = m.Pop().ConvertToString(); if (command == ResCommands.Error) { var errorCode = m.Pop().ConvertToString(); var errorDetails = m.Pop().ConvertToString(); ErrorResolver.RaiseException(errorCode, errorDetails, pending.SetException); return; } if (command != ResCommands.QueryEventsByStreamResponse) pending.SetException(new UnsupportedCommandException(command)); var count = m.PopInt32(); var events = new EventInStorage[count]; for (var i = 0; i < count; i++) { var id = new Guid(m.Pop().ToByteArray()); var streamId = m.Pop().ConvertToString(); var context = m.Pop().ConvertToString(); var sequence = m.PopInt64(); var timestamp = m.PopDateTime();; var type = m.PopString(); var headers = m.PopStringOrNull(); var body = m.PopString(); events[i] = new EventInStorage(context, streamId, sequence, type, id, headers, body, timestamp); } var result = new QueryEventsForStreamResponse(_context, _stream, events); pending.SetResult(result); }; }
public Action<NetMQMessage> Send(NetMQSocket socket, PendingResRequest pendingRequest, Guid requestId) { var pending = (PendingResRequest<CommitResponse>) pendingRequest; var msg = new NetMQMessage(); msg.AppendEmptyFrame(); msg.Append(ResProtocol.ResClient01); msg.Append(ResCommands.AppendCommit); msg.Append(requestId.ToByteArray()); msg.Append(Context); msg.Append(Stream); msg.Append(ExpectedVersion.ToNetMqFrame()); msg.Append(Events.Length.ToNetMqFrame()); foreach (var e in Events) { msg.Append(e.EventId.ToByteArray()); msg.Append(e.Timestamp.ToNetMqFrame()); msg.Append(e.TypeTag); msg.Append(e.Headers.ToNetMqFrame()); msg.Append(e.Body); } socket.SendMultipartMessage(msg); return m => { var command = m.Pop().ConvertToString(); if (command == ResCommands.Error) { var errorCode = m.Pop().ConvertToString(); var errorDetails = m.Pop().ConvertToString(); ErrorResolver.RaiseException(errorCode, errorDetails, pending.SetException); return; } if (command != ResCommands.CommitResult) pending.SetException(new UnsupportedCommandException(command)); var commitId = new Guid(m.Pop().ToByteArray()); var result = new CommitResponse(commitId); pending.SetResult(result); }; }
public void SendRequest(PendingResRequest pendingRequest) { var requestId = Guid.NewGuid(); try { var callback = pendingRequest.Send(_socket, requestId); _callbacks[requestId] = new InflightEntry(requestId, pendingRequest, callback); } catch (NetMQException) { _socket = connect(); } }
public InflightEntry(Guid requestId, PendingResRequest request, Action<NetMQMessage> resultProcessor) { RequestId = requestId; _request = request; _resultProcessor = resultProcessor; }
public Action<NetMQMessage> Send(NetMQSocket socket, PendingResRequest pendingRequest, Guid requestId) { var pending = (PendingResRequest<QueuedEventsResponse>) pendingRequest; var msg = new NetMQMessage(); msg.AppendEmptyFrame(); msg.Append(ResProtocol.ResClient01); msg.Append(ResCommands.AcknowledgeQueue); msg.Append(requestId.ToByteArray()); msg.Append(_context); msg.Append(_queueId); msg.Append(_subscriberId); msg.Append(_allocationId.ToNetMqFrame()); msg.Append(_allocationBatchSize.ToNetMqFrame()); msg.Append(_allocationTimeoutInMilliseconds.ToNetMqFrame()); socket.SendMultipartMessage(msg); return m => { var command = m.Pop().ConvertToString(); if (command == ResCommands.Error) { var errorCode = m.Pop().ConvertToString(); var errorDetails = m.Pop().ConvertToString(); ErrorResolver.RaiseException(errorCode, errorDetails, pending.SetException); return; } if (command != ResCommands.QueuedEvents) pending.SetException(new UnsupportedCommandException(command)); var queueContext = m.Pop().ConvertToString(); var queueId = m.Pop().ConvertToString(); var subscriberId = m.Pop().ConvertToString(); var time = m.PopDateTime(); var allocationId = m.PopNullableInt64(); var count = m.PopInt32(); var events = new EventInStorage[count]; for (var i = 0; i < count; i++) { var id = new Guid(m.Pop().ToByteArray()); var streamId = m.Pop().ConvertToString(); var context = m.Pop().ConvertToString(); var sequence = m.PopInt64(); var timestamp = m.PopDateTime(); var type = m.PopString(); var headers = m.PopStringOrNull(); var body = m.PopString(); events[i] = new EventInStorage(context, streamId, sequence, type, id, headers, body, timestamp); } var result = new QueuedEventsResponse(queueContext, queueId, subscriberId, time, allocationId, events); pending.SetResult(result); }; }