Beispiel #1
0
        private void ProcessPackage(IAsyncResult result)
        {
            UdpClient client = (UdpClient)result.AsyncState;
            IPEndPoint remote = null;
            byte[] bytes;
            try
            {
                bytes = client.EndReceive(result, ref remote);
                client.BeginReceive(ProcessPackage, client);
            }
            catch (ObjectDisposedException) // Closed already
            {
                return;
            }

            string ssdp;
            try
            {
                ssdp = Encoding.UTF8.GetString(bytes);
            }
            catch
            {
                return;
            }

            string[] lines = ssdp.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
            var splited = lines.Select(l => l.Split(new string[] { ": " }, 2, StringSplitOptions.None));

            Dictionary<string, string> dict = new Dictionary<string, string>();
            foreach (var kv in splited)
            {
                if (kv.Length == 2)
                {
                    dict.Add(kv[0], kv[1]);
                }
            }

            IntranetServer found = new IntranetServer();

            if (!dict.ContainsKey("NT")) return;
            if (dict["NT"] != expectedSpecifier) return;

            if (!dict.ContainsKey("SERVER")) return;
            found.Name = dict["SERVER"];

            if (!dict.ContainsKey("LOCATION")) return;
            int serverPort;
            if (!int.TryParse(dict["LOCATION"], out serverPort)) return;
            found.Location = new IPEndPoint(remote.Address, serverPort);

            if (FoundServer != null)
            {
                FoundServer(found);
            }
        }
Beispiel #2
0
        private void ProcessPackage(IAsyncResult result)
        {
            UdpClient  client = (UdpClient)result.AsyncState;
            IPEndPoint remote = null;

            byte[] bytes;
            try
            {
                bytes = client.EndReceive(result, ref remote);
                client.BeginReceive(ProcessPackage, client);
            }
            catch (ObjectDisposedException) // Closed already
            {
                return;
            }

            string ssdp;

            try
            {
                ssdp = Encoding.UTF8.GetString(bytes);
            }
            catch
            {
                return;
            }

            string[] lines   = ssdp.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
            var      splited = lines.Select(l => l.Split(new string[] { ": " }, 2, StringSplitOptions.None));

            Dictionary <string, string> dict = new Dictionary <string, string>();

            foreach (var kv in splited)
            {
                if (kv.Length == 2)
                {
                    dict.Add(kv[0], kv[1]);
                }
            }

            IntranetServer found = new IntranetServer();

            if (!dict.ContainsKey("NT"))
            {
                return;
            }
            if (dict["NT"] != expectedSpecifier)
            {
                return;
            }

            if (!dict.ContainsKey("SERVER"))
            {
                return;
            }
            found.Name = dict["SERVER"];

            if (!dict.ContainsKey("LOCATION"))
            {
                return;
            }
            int serverPort;

            if (!int.TryParse(dict["LOCATION"], out serverPort))
            {
                return;
            }
            found.Location = new IPEndPoint(remote.Address, serverPort);

            if (FoundServer != null)
            {
                FoundServer(found);
            }
        }