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();
}
}
}