예제 #1
0
        private async void DownloadThread(object state)
        {
            var socket = new AresUdpSocket(new ChannelFormatter());

            socket.PacketReceived += UdpPacketReceived;
            socket.ReceiveAsync();

            int i = 0;

            while (IsDownloading)
            {
                DateTime now = DateTime.Now;
                Channels
                .Skip(i)
                .Take(10)
                .ForEach(s => {
                    s.LastSendInfo = now;
                    socket.SendAsync(
                        new SendInfo(),
                        new IPEndPoint(s.ExternalIp, s.Port));
                });

                i = Math.Min(Channels.Count, i + 10);
                await CheckDownloadTimeout(socket);
            }
        }
예제 #2
0
        void StartSocket(int port)
        {
            socket = new AresUdpSocket(new ChannelFormatter());

            socket.PacketReceived += UdpPacketReceived;
            socket.Bind(new IPEndPoint(IPAddress.Any, port));

            udptimer.Change(TimeSpan.Zero, ticklength);

            IsRunning = true;
            socket.ReceiveAsync();
        }
예제 #3
0
        public void Stop()
        {
            running = false;
            timer.Change(-1, -1);

            socket.Dispose();
            socket = null;

            FirewallOpen            = false;
            FinishedTestingFirewall = false;

            SaveCache();
        }
예제 #4
0
        void StartSocket()
        {
            socket = new AresUdpSocket(new ChannelFormatter());

            socket.Exception      += SocketException;
            socket.PacketReceived += PacketReceived;

            socket.Bind(new IPEndPoint(IPAddress.Any, server.Config.Port));

            timer.Change(TimeSpan.Zero, ticklength);

            socket.ReceiveAsync();
        }
예제 #5
0
        public void Stop()
        {
            IsRunning = false;
            udptimer.Change(-1, -1);

            if (socket != null)
            {
                socket.PacketReceived -= UdpPacketReceived;
                socket.Dispose();
                socket = null;
            }

            FirewallOpen    = false;
            TestingFirewall = true;
        }
예제 #6
0
        public void Stop()
        {
            running = false;
            udptimer.Change(-1, -1);

            if (socket != null)
            {
                socket.Exception      -= SocketException;
                socket.PacketReceived -= UdpPacketReceived;
                socket.Dispose();
                socket = null;
            }

            FirewallOpen            = false;
            FinishedTestingFirewall = false;
        }
예제 #7
0
        private async Task CheckDownloadTimeout(AresUdpSocket socket)
        {
            DateTime now = DateTime.Now;

            if (now.Subtract(lastackinfo).TotalSeconds >= 30)
            {
                IsDownloading = false;
                try {
                    socket.Close();
                }
                catch {
                }
                socket.Dispose();
                DownloadComplete?.Invoke(this, EventArgs.Empty);
            }
            else
            {
                await Task.Delay(1000);
            }
        }