Program.cs 2.47 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 8 9 10 11

namespace GazeWebSocketServer
{
    public class Program
    {
12
        private static GazeServer gazeServer;
13 14
        public static void Main(string[] args)
        {
15 16 17
            ConfigurationData.InitializeUnexistingWithDefaults();
            ConfigurationData config = ConfigurationData.ParseToObject();

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

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

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

52 53
        private static void OnGazeDataAvailable(TobiiEyeTracker sender, GazeData data)
        {
54 55 56 57
            if (gazeServer != null && gazeServer.isRunning)
            {
                gazeServer.Publish(data);
            }
58 59 60 61 62 63 64 65 66
        }

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

        private static void OnConnectionEstablished(TobiiEyeTracker sender)
        {
67
            Console.WriteLine($"Tracker {sender.SerialNumber} connected.");
68 69
            ConfigurationData config = ConfigurationData.ParseToObject();
            sender.SetTrackingFrequency(config.TrackerFrequency);
70 71 72
        }
    }
}