-
Notifications
You must be signed in to change notification settings - Fork 0
/
NetMessageClientApp.cs
120 lines (102 loc) · 3.78 KB
/
NetMessageClientApp.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
using NetMessage.Base;
using System;
using System.Globalization;
using System.IO;
namespace NetMessage.Examples.TypeSafe.Client
{
class NetMessageClientApp
{
public const string HostName = "127.0.0.1";
public const ushort Port = 2012;
public static StreamWriter _writer = File.AppendText("messages.log");
static void Main()
{
CultureInfo.CurrentUICulture = CultureInfo.InvariantCulture;
var client = InitClient();
Console.WriteLine("CLIENT started. Press (c)onnect, (s)end, (r)equest, (d)isconnect, (q)uit...");
char consoleKey;
while ((consoleKey = Console.ReadKey().KeyChar) != 'q')
{
Console.WriteLine();
switch (consoleKey)
{
case 'c':
if (client.IsConnected)
{
Console.WriteLine("Already connected.");
break;
}
Console.WriteLine("Connecting...");
client.ConnectAsync(HostName, Port);
break;
case 's':
if (!client.IsConnected)
{
Console.WriteLine("Cannot send, not connected.");
break;
}
// note that will not be displayed correctly in the console if your system locale is something like English
client.SendMessageAsync("Hello from Client!");
break;
case 'r':
if (!client.IsConnected)
{
Console.WriteLine("Cannot send, not connected.");
break;
}
RequestAndResponseExample(client);
break;
case 'd':
if (!client.IsConnected)
{
Console.WriteLine("Already disconnected.");
break;
}
Console.WriteLine("Closing...");
client.Disconnect();
break;
}
}
}
private static NetMessageClient InitClient()
{
var client = new NetMessageClient();
client.OnError += OnError;
client.Connected += OnConnected;
client.Disconnected += OnDisconnected;
client.AddMessageHandler<string>(StringMessageHandler);
client.AddRequestHandler<CalculationRequest, CalculationResponse>(CalculationRequestHandler);
return client;
}
private static void OnDisconnected(NetMessageClient client, SessionClosedArgs args)
{
Console.WriteLine($"DISCONNECTED, Reason: {args.Reason}");
}
private static void OnConnected(NetMessageClient client)
{
Console.WriteLine("CONNECTED");
}
private static void OnError(NetMessageClient client, string errorMessage, Exception? ex)
{
Console.WriteLine($"ERROR: {errorMessage} {ex?.Message}");
}
private static void StringMessageHandler(NetMessageClient arg1, string stringMessage)
{
Console.WriteLine($"RECEIVED STRING MESSAGE: {stringMessage}");
_writer.WriteLine($"RECEIVED STRING MESSAGE: {stringMessage}");
_writer.Flush();
}
private static void CalculationRequestHandler(NetMessageClient client, TypedRequest<CalculationRequest, CalculationResponse> calculationRequest)
{
var request = calculationRequest.Request;
Console.WriteLine($"RECEIVED CALCULATION REQUEST: What is {request.ValueA} * {request.ValueB}");
var response = new CalculationResponse { Result = request.ValueA * request.ValueB };
calculationRequest.SendResponseAsync(response);
}
private static async void RequestAndResponseExample(NetMessageClient client)
{
var response = await client.SendRequestAsync(new WeatherRequest { City = "Bonn", Date = DateTime.Now });
Console.WriteLine($"RECEIVED RESPONSE: {response.Forecast}");
}
}
}