Untitled
unknown
plain_text
2 years ago
1.8 kB
4
Indexable
// Server public class MyService : MyService.MyServiceBase { public event EventHandler<MessageEventArgs> MessageReceived; public override async Task<Empty> SendMessage(Message request, ServerCallContext context) { // Trigger message received event MessageReceived?.Invoke(this, new MessageEventArgs(request)); return new Empty(); } } public class MessageEventArgs : EventArgs { public Message Message { get; } public MessageEventArgs(Message message) { Message = message; } } // Client public class MyClient { private MyService.MyServiceClient _client; public event EventHandler<MessageEventArgs> MessageReceived; public async Task ConnectAsync(string host, int port) { var channel = new Channel($"{host}:{port}", ChannelCredentials.Insecure); _client = new MyService.MyServiceClient(channel); // Subscribe to server-side event var call = _client.SendMessage(new Message()); await foreach (var response in call.ResponseStream.ReadAllAsync()) { // Trigger message received event MessageReceived?.Invoke(this, new MessageEventArgs(response)); } } public async Task SendMessageAsync(Message message) { await _client.SendMessageAsync(message); } } // Usage var server = new MyService(); server.MessageReceived += (sender, e) => { var message = e.Message; // Handle server-side message received event }; var client = new MyClient(); client.MessageReceived += (sender, e) => { var message = e.Message; // Handle client-side message received event }; await server.StartAsync(); await client.ConnectAsync("localhost", 1234); await client.SendMessageAsync(new Message());
Editor is loading...