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_;