Program.cs 2.69 KB
Newer Older
1
using System;
2 3
using System.Threading.Tasks;
using TrackerBridge;
4 5
using System.Windows.Forms;
using System.Drawing;
6
using System.Timers;
7
using TrackerBridge.DSP;
8 9 10 11 12

namespace GazeWebSocketServer
{
    public class Program
    {
13
        private static GazeServer gazeServer;
14
        private static GazeDecimatorFixedLength decimator = new GazeDecimatorFixedLength(1, 600);
15

16 17
        public static void Main(string[] args)
        {
18 19 20
            ConfigurationData.InitializeUnexistingWithDefaults();
            ConfigurationData config = ConfigurationData.ParseToObject();

21
            if (args.Length > 0 && args[0] == "-d")
22
            {
23
                Task.Run(() => SimulateGazeDataHz(600));
24 25 26 27 28 29 30 31 32
            }
            else
            {
                TobiiEyeTracker tobiiEyeTracker = new TobiiEyeTracker(config.TrackerSerialNumber);
                tobiiEyeTracker.ConnectionEvent += OnConnectionEstablished;
                tobiiEyeTracker.ConnectionTimeout += OnConnectionTimeout;
                tobiiEyeTracker.GazeDataAvailable += OnGazeDataAvailable;
                tobiiEyeTracker.Connect();
            }
33 34 35 36 37 38

            gazeServer = new GazeServer(config.WebSocketPort, config.WebSocketEndpoint);
            gazeServer.Start();
            Console.ReadLine();
        }

39
        private static void SimulateGazeDataHz(Int32 frequency)
40
        {
41
            System.Timers.Timer timer = new System.Timers.Timer(1000.0/frequency);
42
            timer.Elapsed += (Object sender, ElapsedEventArgs e) =>
43 44 45 46 47
            {
                Point mousePosition = Control.MousePosition;
                GazeData data = new GazeData(mousePosition.X, mousePosition.Y, mousePosition.X, mousePosition.Y, 0, 0);
                if (gazeServer != null && gazeServer.isRunning)
                {
48 49 50
                    decimator.Input(data);
                    if(decimator.Output.HasValue)
                        gazeServer.Publish(data);
51
                }
52 53 54
            };
            timer.AutoReset = true;
            timer.Start();
55 56
        }

57 58
        private static void OnGazeDataAvailable(TobiiEyeTracker sender, GazeData data)
        {
59 60 61 62
            if (gazeServer != null && gazeServer.isRunning)
            {
                gazeServer.Publish(data);
            }
63 64 65 66 67 68 69 70 71
        }

        private static void OnConnectionTimeout(TobiiEyeTracker sender)
        {
            Console.WriteLine("Timeout while searching for trackers.");
        }

        private static void OnConnectionEstablished(TobiiEyeTracker sender)
        {
72
            Console.WriteLine($"Tracker {sender.SerialNumber} connected.");
73 74
            ConfigurationData config = ConfigurationData.ParseToObject();
            sender.SetTrackingFrequency(config.TrackerFrequency);
75 76 77
        }
    }
}