Skip to content

Commit ffa02e9

Browse files
committed
Added send async message overload on relay client
1 parent e9838fd commit ffa02e9

File tree

2 files changed

+34
-14
lines changed

2 files changed

+34
-14
lines changed

Protobuff/Components/MessageEnvelope.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,11 @@ public T UnpackPayload<T>() where T : IProtoMessage
8383
{
8484
return serialiser.UnpackEnvelopedMessage<T>(this);
8585
}
86-
86+
/// <summary>
87+
/// Locks the payload bytes by making a copy.
88+
/// You Must Lock the bytes or unpack payload if message will leave the stack.
89+
/// Payload will be overwitten on next message
90+
/// </summary>
8791
public void LockBytes()
8892
{
8993
if (payload == null || IsLocked)

Protobuff/P2P/RelayClient.cs

Lines changed: 29 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -346,8 +346,6 @@ public void SendUdpMesssage(Guid toId, byte[] data, int offset, int count, strin
346346
udpRelayClient.SendAsyncMessage(env, data, offset, count);
347347
}
348348

349-
350-
351349
public void SendAsyncMessage(Guid toId, MessageEnvelope message)
352350
{
353351
if (!Peers.TryGetValue(toId, out _) && toId != sessionId)
@@ -362,18 +360,29 @@ public void SendAsyncMessage<T>(Guid toId, T message, string messageHeader = nul
362360
if (!Peers.TryGetValue(toId, out _) && toId != sessionId)
363361
return;
364362

365-
var envelopedMessage = InternalMessageResources.MakeRelayMessage(sessionId, toId, null);
366-
envelopedMessage.Header = messageHeader == null ? typeof(T).Name : messageHeader;
367-
protoClient.SendAsyncMessage(envelopedMessage, message);
363+
var envelope = InternalMessageResources.MakeRelayMessage(sessionId, toId, null);
364+
envelope.Header = messageHeader == null ? typeof(T).Name : messageHeader;
365+
protoClient.SendAsyncMessage(envelope, message);
366+
}
367+
368+
public void SendAsyncMessage<T>(Guid toId, MessageEnvelope envelope, T message) where T : IProtoMessage
369+
{
370+
if (!Peers.TryGetValue(toId, out _) && toId != sessionId)
371+
return;
372+
373+
envelope.From = sessionId;
374+
envelope.To = toId;
375+
protoClient.SendAsyncMessage(envelope, message);
368376
}
377+
369378
public void SendAsyncMessage(Guid toId, byte[] data, string dataName)
370379
{
371380
if (!Peers.TryGetValue(toId, out _) && toId != sessionId)
372381
return;
373382

374-
var envelopedMessage = InternalMessageResources.MakeRelayMessage(sessionId, toId, null);
375-
envelopedMessage.Header = dataName;
376-
protoClient.SendAsyncMessage(envelopedMessage, data, 0, data.Length);
383+
var envelope = InternalMessageResources.MakeRelayMessage(sessionId, toId, null);
384+
envelope.Header = dataName;
385+
protoClient.SendAsyncMessage(envelope, data, 0, data.Length);
377386
}
378387

379388
public void SendAsyncMessage(Guid toId, byte[] data, int offset, int count, string dataName)
@@ -388,17 +397,15 @@ public void SendAsyncMessage(Guid toId, byte[] data, int offset, int count, stri
388397

389398
public async Task<MessageEnvelope> SendRequestAndWaitResponse<T>(Guid toId, T message, string messageHeader = null, int timeoutMs = 10000) where T : IProtoMessage
390399
{
400+
var envelope = InternalMessageResources.MakeRelayRequestMessage(Guid.NewGuid(), sessionId, toId, null);
401+
envelope.Header = messageHeader == null ? typeof(T).Name : messageHeader;
391402

392-
var envelopedMessage = InternalMessageResources.MakeRelayRequestMessage(Guid.NewGuid(), sessionId, toId, null);
393-
envelopedMessage.Header = messageHeader == null ? typeof(T).Name : messageHeader;
394-
395-
var result = await protoClient.SendMessageAndWaitResponse(envelopedMessage, message, timeoutMs);
403+
var result = await protoClient.SendMessageAndWaitResponse(envelope, message, timeoutMs);
396404
return result;
397405
}
398406

399407
public async Task<MessageEnvelope> SendRequestAndWaitResponse(Guid toId, byte[] data, string dataName, int timeoutMs = 10000)
400408
{
401-
402409
var envelopedMessage = InternalMessageResources.MakeRelayRequestMessage(Guid.NewGuid(), sessionId, toId, null);
403410
envelopedMessage.Header = dataName;
404411

@@ -422,6 +429,15 @@ public async Task<MessageEnvelope> SendRequestAndWaitResponse(Guid toId, Message
422429
return response;
423430
}
424431

432+
public async Task<MessageEnvelope> SendRequestAndWaitResponse<T>(Guid toId, MessageEnvelope envelope, T message ,int timeoutMs = 10000) where T:IProtoMessage
433+
{
434+
envelope.From = sessionId;
435+
envelope.To = toId;
436+
437+
var response = await protoClient.SendMessageAndWaitResponse(envelope,message, timeoutMs);
438+
return response;
439+
}
440+
425441
#endregion
426442

427443
private void HandleMessageReceived(MessageEnvelope message)

0 commit comments

Comments
 (0)