Skip to content

Commit 1c0a119

Browse files
committed
Unpack message feature on message envelope
1 parent 591ec50 commit 1c0a119

File tree

2 files changed

+49
-1
lines changed

2 files changed

+49
-1
lines changed

Protobuff/Components/MessageEnvelope.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ namespace Protobuff
1111
[ProtoContract]
1212
public class MessageEnvelope : IProtoMessage
1313
{
14+
public static ConcurrentProtoSerialiser serialiser= new ConcurrentProtoSerialiser();
1415
public const string RequestTimeout = "RequestTimedOut";
1516
public const string RequestCancelled = "RequestCancelled";
1617

@@ -34,5 +35,10 @@ public class MessageEnvelope : IProtoMessage
3435

3536
public byte[] Payload { get; set; }
3637

38+
public T UnpackPayload<T>() where T : IProtoMessage
39+
{
40+
return serialiser.UnpackEnvelopedMessage<T>(this);
41+
}
42+
3743
}
3844
}

Tests/ConsoleTest/Program.cs

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
using System.Buffers;
3131
using Microsoft.Win32;
3232
using NetworkLibrary.Components.Statistics;
33+
using ProtoBuf;
3334

3435
namespace ConsoleTest
3536
{
@@ -58,10 +59,11 @@ internal class Program
5859
static void Main(string[] args)
5960
{
6061
MiniLogger.AllLog += (log) => Console.WriteLine(log);
62+
ExampleProtoSecure();
6163
//PoolTest();
6264
//UdpProtoTest();
6365
//EnvelopeTest();
64-
RelayTest();
66+
//RelayTest();
6567
//ByteCopyTest();
6668
//BitConverterTest();
6769
//ByteCopyTest2();
@@ -80,6 +82,46 @@ static void Main(string[] args)
8082

8183

8284
}
85+
[ProtoContract]
86+
class SamplePayload :IProtoMessage
87+
{
88+
[ProtoMember(1)]
89+
public string sample;
90+
}
91+
92+
private static async Task ExampleProtoSecure()
93+
{
94+
var scert = new X509Certificate2("server.pfx", "greenpass");
95+
var cert = new X509Certificate2("client.pfx", "greenpass");
96+
97+
SecureProtoServer server = new SecureProtoServer(20008, 100, scert);
98+
server.OnMessageReceived += ServerMessageReceived;
99+
100+
var client = new SecureProtoClient(cert);
101+
client.OnMessageReceived += ClientMessageReceived;
102+
client.Connect("127.0.0.1", 20008);
103+
104+
var Payload = new SamplePayload() { sample = "Hello" };
105+
var messageEnvelope = new MessageEnvelope();
106+
107+
// You can just send a message, get replies on ClientMessageReceived.
108+
client.SendAsyncMessage(messageEnvelope);
109+
client.SendAsyncMessage(messageEnvelope,Payload);
110+
111+
// Or you can wait for a reply async.
112+
MessageEnvelope result = await client.SendMessageAndWaitResponse(messageEnvelope, Payload);
113+
var payload = result.UnpackPayload<SamplePayload>();
114+
115+
void ServerMessageReceived(in Guid clientId, MessageEnvelope message)
116+
{
117+
server.SendAsyncMessage(in clientId, message);
118+
}
119+
120+
void ClientMessageReceived(MessageEnvelope message)
121+
{
122+
}
123+
}
124+
83125

84126
private static void PoolTest()
85127
{

0 commit comments

Comments
 (0)