示例#1
0
 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);
            });
        }
示例#3
0
        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();
        }
示例#4
0
        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();
            }
        }
示例#5
0
        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();
            }
        }
示例#6
0
        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());
            }
        }
示例#7
0
        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);
            }
        }