public void QueuePacket(Packet P) { if (P == null || SendList == null) { return; } SendList.Enqueue(P); }
private HangfireSettings() { var builder = new ConfigurationBuilder() .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true); Configuration = builder.Build(); //绑定服务到集合 Configuration.GetSection("HealthChecks-UI:CheckUrls").Bind(HostServers); //绑定接收者邮箱 Configuration.GetSection("SMTPConfig:SendToMailList").Bind(SendList); SendList.ForEach(p => { SendMailList.Add(p.Email); }); }
private void ReceiveData(IAsyncResult Result) { if (!Connected) { return; } int DataRead; try { DataRead = TClient.Client.EndReceive(Result); } catch { Connected = false; SendList.Clear(); Disconnect(); return; } if (DataRead == 0) { Disconnect(); return; } byte[] RawBytes = Result.AsyncState as byte[]; byte[] Temp = RawData; RawData = new byte[DataRead + Temp.Length]; System.Buffer.BlockCopy(Temp, 0, RawData, 0, Temp.Length); System.Buffer.BlockCopy(RawBytes, 0, RawData, Temp.Length, DataRead); Packet P; while ((P = Packet.ReceivePacket(RawData, out RawData)) != null) { ReceiveList.Enqueue(P); } BeginReceive(); }
private void BeginReceive() { if (!Connected) { return; } byte[] RawBytes = new byte[8 * 1024]; try { TClient.Client.BeginReceive(RawBytes, 0, RawBytes.Length, SocketFlags.None, ReceiveData, RawBytes); } catch { Connected = false; SendList.Clear(); Disconnect(); } }
private void BeginSend(Packet P) { if (!Connected || P == null) { return; } byte[] RawBytes = P.GetPacketBytes(); try { TClient.Client.BeginSend(RawBytes, 0, RawBytes.Length, SocketFlags.None, SendData, null); } catch { Connected = false; SendList.Clear(); Disconnect(); } }
public void Process() { while (ReceiveList.Count > 0) { ProcessPacket(ReceiveList.Dequeue()); TimeOutTime = Main.Time + Settings.TimeOut; } if (Main.Time > TimeOutTime) { Connected = false; SendList.Clear(); Disconnect(); return; } while (SendList.Count > 0) { BeginSend(SendList.Dequeue()); } }
public void Disconnect() { while (Connected && SendList.Count > 0) { BeginSend(SendList.Dequeue()); } Connected = false; if (Stage == GameStage.Disconnected) { return; } if (Stage == GameStage.Game) { Player.DeSpawn(); } Stage = GameStage.Disconnected; TimeDisconnected = Main.Time; if (TClient != null) { TClient.Client.Dispose(); } TClient = null; Account = null; SendList.Clear(); ReceiveList.Clear(); Network.ActiveConnections.Remove(this); if (!Network.ExpiredConnections.Contains(this)) { Network.ExpiredConnections.Add(this); } }