Beispiel #1
0
        private static void ProcessVitaDiscoveryDataPacket(VitaDiscoveryPacket packet)
        {
            Radio radio = new Radio();

            string[] words = packet.payload.Trim().Split(' ');

            foreach (string kv in words)
            {
                string[] tokens = kv.Split('=');
                if (tokens.Length != 2)
                {
                    Debug.WriteLine("FlexLib::Discovery::ProcessVitaDiscoveryDataPacket: Invalid key/value pair (" + kv + ")");
                    continue;
                }

                string key   = tokens[0].Trim();
                string value = tokens[1].Trim();
                value = value.Replace("\0", "");

                switch (key.ToLower())
                {
                case "callsign":
                    radio.Callsign = value;
                    break;

                case "discovery_protocol_version":
                {
                    ulong temp;
                    bool  b = FlexVersion.TryParse(value, out temp);
                    if (!b)
                    {
                        Debug.WriteLine("FlexLib::Discovery::ProcessVitaDiscoveryDataPacket: Error converting version string (" + value + ")");
                        continue;
                    }

                    radio.DiscoveryProtocolVersion = temp;
                }
                break;

                case "inuse_host":
                    radio.InUseHost = value;
                    break;

                case "inuse_ip":
                    radio.InUseIP = value;
                    break;

                case "ip":
                {
                    IPAddress temp;
                    bool      b = IPAddress.TryParse(value, out temp);
                    if (!b)
                    {
                        Debug.WriteLine("FlexLib::Discovery::ProcessVitaDiscoveryDataPacket: Invalid key/value pair (" + kv + ")");
                        continue;
                    }

                    radio.IP = temp;
                }
                break;

                case "model":
                    radio.Model = value;
                    break;

                case "nickname":
                    radio.Nickname = value;
                    break;

                case "port":
                {
                    ushort temp;
                    bool   b = ushort.TryParse(value, out temp);
                    if (!b)
                    {
                        Debug.WriteLine("FlexLib::Discovery::ProcessVitaDiscoveryDataPacket: Invalid key/value pair (" + kv + ")");
                        continue;
                    }

                    radio.CommandPort = temp;
                }
                break;

                case "serial":
                    radio.Serial = StringHelper.Sanitize(value);
                    break;

                case "status":
                    radio.Status = value;
                    break;

                case "version":
                {
                    ulong temp;
                    bool  b = FlexVersion.TryParse(value, out temp);
                    if (!b)
                    {
                        Debug.WriteLine("FlexLib::Discovery::ProcessVitaDiscoveryDataPacket: Error converting version string (" + value + ")");
                        continue;
                    }

                    radio.Version = temp;
                }
                break;
                }
            }

            OnRadioDiscoveredEventHandler(radio);
        }