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();
        }
Ejemplo n.º 3
0
        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();
        }