示例#1
0
        public void Scan()
        {
            if (IsScanning)
            {
                return;
            }
            if (!RESTConnectToServer.ProxyIsSet)
            {
                RESTConnectToServer.SetProxy();
            }
            bw.Dispose();
            IsScanning = true;
            bw         = new BackgroundWorker();
            bw.WorkerReportsProgress      = true;
            bw.WorkerSupportsCancellation = true;
            ServerList.Clear();

            if (ServerListUpdated != null)
            {
                ServerListUpdated("");
            }
            bw.DoWork             += ActualScanning;
            bw.RunWorkerCompleted += ScanStopping;


            bw.RunWorkerAsync();
        }
示例#2
0
        private void PotentialServerIPAnalysis(IPAddress ip)
        {
            if (!bw.CancellationPending)
            {
                RestClientResponse answer = RESTConnectToServer.Get(ip.ToString(), ActionsEnum.CheckServer);
                Log.Instance.W(this, ip.ToString() + " - " + answer.AnswerStatus);
                if (!string.IsNullOrEmpty(answer.AnswerStatus) && answer.AnswerStatus == "OK".ToUpper())
                {
                    var NewServer = new LeaderServer()
                    {
                        ServerDNSName = answer.AnswerContent.Substring(0, 10),
                        ServerIP      = ip.ToString(),
                        VisibleName   = answer.AnswerContent.Substring(0, 10)
                    };

                    ServerList.Add(
                        NewServer
                        );
                    CheckedServersList.Add(ip.ToString());
                    if (ServerListUpdated != null)
                    {
                        ServerListUpdated(ip.ToString());
                    }
                }
            }
            else
            {
                Log.Instance.W(this, "REST is Canceled");
            }
        }
示例#3
0
        public static LeaderServer ReturnLeaderInfo(string ip)
        {
            //Task.Delay(5);
            RestClientResponse answer = RESTConnectToServer.Get(ip, ActionsEnum.CheckServer);


            if (!string.IsNullOrEmpty(answer.AnswerStatus) && answer.AnswerStatus == "OK".ToUpper())
            {
                LeaderServer foundLeader =
                    Newtonsoft.Json.JsonConvert.DeserializeObject <LeaderServer>(answer.AnswerContent);
                return(null);
            }
            else
            {
                return(null);
            }
        }
示例#4
0
        public void ScanIPs()
        {
            List <IPAddress> ips = new List <IPAddress>();

            var interfaces = NetworkInterface.GetAllNetworkInterfaces().ToList();

            foreach (var networkInterface in interfaces)
            {
                var addresses = networkInterface.GetIPProperties().UnicastAddresses;
                foreach (var address in addresses)
                {
                    if (address.Address.AddressFamily == AddressFamily.InterNetwork)
                    {
                        var mask = address.IPv4Mask;
                        if (mask.Equals(
                                new IPAddress(new byte[] { 255, 255, 255, 0 })
                                ))
                        {
                            byte[] byteIP = address.Address.GetAddressBytes();
                            for (byte i = 1; i < 255; i++)
                            {
                                var ip = new IPAddress(new byte[]
                                {
                                    byteIP[0],
                                    byteIP[1],
                                    byteIP[2],
                                    i
                                }
                                                       );

                                ips.Add(ip);
                            }
                        }
                    }
                }
            }

            PotentialServersList.AddRange(ips.ConvertAll(input => input.ToString()));

            ips.AsParallel()

            .WithExecutionMode(ParallelExecutionMode.ForceParallelism)
            .WithMergeOptions(ParallelMergeOptions.NotBuffered)
            //.WithDegreeOfParallelism(20)
            .ForAll(x =>
            {
                if (!bw.CancellationPending)
                {
                    var j = PingHost(x.ToString());
                    Log.Instance.W(this, x.ToString() + " + " + j.ToString());
                    if (!bw.CancellationPending)
                    {
                        if (j)
                        {
                            RestClientResponse answer =
                                RESTConnectToServer.Get(x.ToString(), ActionsEnum.CheckServer);
                            if (!string.IsNullOrEmpty(answer.AnswerStatus) &&
                                answer.AnswerStatus == "OK".ToUpper())
                            {
                                LeaderServer foundLeader =
                                    Newtonsoft.Json.JsonConvert.DeserializeObject <LeaderServer>(
                                        answer.AnswerContent);

                                if (!ServerList.Any(y => y.VisibleName == foundLeader.VisibleName))

                                {
                                    ServerList.Add(
                                        foundLeader
                                        );
                                    if (ServerListUpdated != null)
                                    {
                                        ServerListUpdated(foundLeader.ServerDNSName);
                                    }
                                }

                                CheckedServersList.Add(x.ToString());
                            }
                        }
                    }
                }

                ProcessedServerUpdate(1);
            });
        }
示例#5
0
        private async void PotentialServerAnalysis(string ServerDNS)
        {
            var j = PingHost(ServerDNS);

            Log.Instance.W(this, ServerDNS + " + " + j);
            if (j)
            {
                //Checking for Server get answer
                if (!CheckedServersList.Contains(ServerDNS) /*&&!PotentialServersList.Contains(ServerDNS*/)
                {
                    if (!bw.CancellationPending)
                    {
                        await Task.Run(() =>
                        {
                            //Task.Delay(5);
                            RestClientResponse answer = RESTConnectToServer.Get(ServerDNS, ActionsEnum.CheckServer);


                            if (!string.IsNullOrEmpty(answer.AnswerStatus) && answer.AnswerStatus == "OK".ToUpper())
                            {
                                LeaderServer foundLeader = Newtonsoft.Json.JsonConvert.DeserializeObject <LeaderServer>(answer.AnswerContent);

                                string ip = ResolveIP(foundLeader.ServerDNSName)[0];

                                if (!ServerList.Any(x => x.VisibleName == foundLeader.VisibleName))
                                {
                                    ServerList.Add(
                                        foundLeader
                                        );


                                    Log.Instance.W(this, $" + server added {ServerDNS} - {ip}");
                                    if (ServerListUpdated != null)
                                    {
                                        ServerListUpdated(foundLeader.ServerDNSName);
                                    }
                                }
                                CheckedServersList.Add(foundLeader.ServerDNSName);
                            }
                            else
                            {
                                try
                                {
                                    CheckedServersList.Add(ServerDNS);
                                }
                                catch (Exception e)
                                {
                                    Console.WriteLine(e);
                                    Log.Instance.W(this, $" Error occured when server suppose to be added: {e.Message}");
                                }
                                //TODO DELETE
                                Log.Instance.W(this, $" & not answering {ServerDNS}");
                            }
                        });
                    }
                } //TODO DELETE
                else
                {
                    Log.Instance.W(this, $" @ already checked {ServerDNS}");
                }
                ProcessedServerUpdate(1);
            }
        }