From af5dd9305620727f7558986e469499e9ddaa6d3f Mon Sep 17 00:00:00 2001 From: Viacheslav Demydiuk Date: Thu, 11 Jan 2024 22:52:43 +0200 Subject: [PATCH] Added message MtClientReady into MtClient. Added event Disconnected into MtRpcClient --- MtClient/MtMessage.cs | 22 ++++++++++++++++++---- MtClient/MtRpcClient.cs | 5 ++++- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/MtClient/MtMessage.cs b/MtClient/MtMessage.cs index 77b09b9a..310bba7b 100755 --- a/MtClient/MtMessage.cs +++ b/MtClient/MtMessage.cs @@ -1,4 +1,7 @@ -namespace MtClient +using System.ComponentModel.Design; +using System.Data; + +namespace MtClient { public enum MessageType { @@ -8,6 +11,7 @@ ExpertList = 3, ExpertAdded = 4, ExpertRemoved = 5, + ClientReady = 6 } public abstract class MtMessage @@ -37,6 +41,16 @@ } } + public class MtClientReady : MtMessage + { + public override MessageType MsgType => MessageType.ClientReady; + + protected override string GetMessageBody() + { + return string.Empty; + } + } + public class MtEvent(int expertHandle, int eventType, string payload) : MtMessage { public override MessageType MsgType => MessageType.Event; @@ -101,11 +115,11 @@ } } - public class MtExpertListMsg(List experts) : MtMessage + public class MtExpertListMsg(HashSet experts) : MtMessage { public override MessageType MsgType => MessageType.ExpertList; - public List Experts { private set; get; } = experts; + public HashSet Experts { private set; get; } = experts; protected override string GetMessageBody() { @@ -115,7 +129,7 @@ public static MtMessage? Parse(string payload) { var pieces = payload.Split(","); - List handles = []; + HashSet handles = []; foreach (var p in pieces) { if (int.TryParse(p, out int expertHandle) == false) diff --git a/MtClient/MtRpcClient.cs b/MtClient/MtRpcClient.cs index a2bbac7e..b618b8e6 100755 --- a/MtClient/MtRpcClient.cs +++ b/MtClient/MtRpcClient.cs @@ -40,7 +40,8 @@ namespace MtClient try { - await ws_.CloseAsync(WebSocketCloseStatus.NormalClosure, null, CancellationToken.None); + if (ws_.State == WebSocketState.Open) + await ws_.CloseAsync(WebSocketCloseStatus.NormalClosure, null, CancellationToken.None); ws_.Dispose(); } catch (Exception ex) @@ -103,6 +104,7 @@ namespace MtClient { Log($"DoReceive: close signal {result.CloseStatusDescription}"); await ws_.CloseAsync(WebSocketCloseStatus.NormalClosure, null, CancellationToken.None); + Disconnected?.Invoke(this, EventArgs.Empty); break; } else @@ -169,6 +171,7 @@ namespace MtClient public event EventHandler? MessageReceived; public event EventHandler? ConnectionFailed; + public event EventHandler? Disconnected; private readonly ClientWebSocket ws_ = new(); private readonly string host_;