public OpenTrackReceiver(string ip, int port, DSUServer dsu_server) { _socket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.ReuseAddress, true); _socket.Bind(new IPEndPoint(IPAddress.Parse(ip), port)); _dsu_server = dsu_server; Console.WriteLine($"OpenTrack receiver listening on ip '{ip}' and port '{port.ToString()}'"); }
public void Start() { Running = true; _queued_items.Clear(); _packet_receive_thread = new Thread(() => { while (Running) { ReceiveUDPPacket(); } }); _packet_receive_thread.Start(); _process_queue_thread = new Thread(() => { if (_dsu_server != null) { _dsu_server.Start(); } while (Running) { OpenTrackData data; if (_queued_items.TryDequeue(out data)) { ReceiveOpenTrackPacket(data); } } if (_dsu_server != null) { _dsu_server.Stop(); _dsu_server = null; } }); _process_queue_thread.Start(); }
static void Main(string[] args) { var configuration = new ConfigurationBuilder() .SetBasePath(Directory.GetParent(AppContext.BaseDirectory).FullName) .AddJsonFile("appsettings.json", false) .Build() ; DSUServer server = null; if (configuration.GetValue <bool>("DebugOpenTrack") != true) { string dsu_server_ip = configuration.GetValue <string>("DSUServerIp"); if (dsu_server_ip == null) { Console.WriteLine("DSUServerIp configuration is not found or invalid"); return; } int?dsu_server_port = configuration.GetValue <int?>("DSUServerPort"); if (dsu_server_port == null) { Console.WriteLine("DSUServerPort configuration is not found or invalid"); return; } server = new DSUServer(dsu_server_ip, dsu_server_port.Value); } string open_track_ip = configuration.GetValue <string>("OpenTrackIp"); if (open_track_ip == null) { Console.WriteLine("OpenTrackIp configuration is not found or invalid"); return; } int?open_track_port = configuration.GetValue <int?>("OpenTrackPort"); if (open_track_port == null) { Console.WriteLine("OpenTrackPort configuration is not found or invalid"); return; } bool?relative_data = configuration.GetValue <bool?>("RelativeData"); if (relative_data == null) { relative_data = true; } bool?divide_by_gravity = configuration.GetValue <bool?>("DivideByGravity"); if (divide_by_gravity == null) { divide_by_gravity = true; } OpenTrackReceiver receiver = null; if (server == null) { receiver = new OpenTrackReceiver(open_track_ip, open_track_port.Value, relative_data.Value, divide_by_gravity.Value); } else { receiver = new OpenTrackReceiver(open_track_ip, open_track_port.Value, server, relative_data.Value, divide_by_gravity.Value); } receiver.Start(); Console.WriteLine("Press any key to stop..."); Console.ReadKey(); receiver.Stop(); }