Program.cs 2.63 KB
Newer Older
1
using System;
2 3
using System.Threading.Tasks;
using System.Threading;
4 5 6
using WebSocketSharp;
using WebSocketSharp.Server;
using Tobii.Research;
7
using TrackerBridge;
8 9
using System.Windows.Forms;
using System.Drawing;
10 11 12 13 14

namespace GazeWebSocketServer
{
    public class Program
    {
15
        private static GazeServer gazeServer;
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 24 25 26 27 28 29 30 31 32
            {
                Task.Run(() => SimulateGazeData(300));
            }
            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 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
        private static void SimulateGazeData(UInt16 frequencyHz)
        {
            TimeSpan period = new TimeSpan(Convert.ToInt64((1.0 / frequencyHz) * 10e7));
            while (true)
            {
                DateTime start = DateTime.Now;
                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);
                }
                TimeSpan delay = period - (DateTime.Now - start);
                Thread.Sleep(delay.Ticks >= 0 ? delay.Milliseconds : 0);
            }
        }

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

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

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