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); }