using System.Net; using System.Text.Json.Serialization; namespace linker.messenger.signin { /// /// 登入对象 /// public sealed class SignInClientState { public SignInClientState() { AppDomain.CurrentDomain.ProcessExit += (s, e) => Disponse(); Console.CancelKeyPress += (s, e) => Disponse(); } /// /// 登入服务器的连接对象 /// [JsonIgnore] public IConnection Connection { get; set; } [JsonIgnore] public bool connecting = false; public bool Connecting => connecting; public bool Connected => Connection != null && Connection.Connected; public string Version { get; set; } public IPEndPoint WanAddress { get; set; } = new IPEndPoint(IPAddress.Any, 0); public IPEndPoint LanAddress => Connection?.LocalAddress ?? new IPEndPoint(IPAddress.Any, 0); private int networdkEnabledTimes = 0; [JsonIgnore] public Action NetworkEnabledHandleBefore { get; set; } /// /// 上线事件 /// [JsonIgnore] public Action NetworkEnabledHandle { get; set; } /// /// 第一次上线 /// [JsonIgnore] public Action NetworkFirstEnabledHandle { get; set; } public void PushNetworkEnabledBefore() { if (networdkEnabledTimes == 0) { NetworkFirstEnabledHandle?.Invoke(); } NetworkEnabledHandleBefore?.Invoke(); } /// /// 发布上线事件 /// public void PushNetworkEnabled() { if (networdkEnabledTimes == 0) { NetworkFirstEnabledHandle?.Invoke(); } NetworkEnabledHandle?.Invoke(networdkEnabledTimes); networdkEnabledTimes++; } public void Disponse() { Connection?.Disponse(); } } }