public byte[] Encode(BaseMessage message) { var bytes = message.GetBytes(); var sendBytes = new byte[BaseMessage.HeaderLength + bytes.Length]; Array.Copy(BitConverter.GetBytes(bytes.Length), sendBytes, sizeof(int)); Array.Copy(bytes, 0, sendBytes, BaseMessage.HeaderLength, bytes.Length); return sendBytes; }
private async Task SendData(string data, string method) { var message = new BaseMessage { Success = true, Data = data, Method = method }; var bytes = await message.GetBytes(); int count = 1024; int offset = 0; do { await _stream.WriteAsync(bytes, offset, count); offset += count; } while (offset < bytes.Length); }
public async Task <BaseMessage> CallAsync(BaseMessage message, CancellationToken cToken) { cToken.ThrowIfCancellationRequested(); var coId = Guid.NewGuid().ToString(); var props = _channel.CreateBasicProperties(); props.CorrelationId = coId; props.ReplyTo = _replyQueueName; var tcs = new TaskCompletionSource <BaseMessage>(); _callbackMapper.TryAdd(coId, tcs); _channel.BasicPublish( exchange: "", routingKey: "rpc_queue", basicProperties: props, body: message.GetBytes() ); _channel.BasicConsume( consumer: _consumer, queue: _replyQueueName, autoAck: true ); cToken.Register(() => _callbackMapper.TryRemove(coId, out var _)); tcs.Task.Wait(cToken); var response = await tcs.Task; Console.WriteLine(response.GenerateLog()); return(response); }