using System; using System.Threading.Tasks; using TrackerBridge; using System.Windows.Forms; using System.Drawing; using System.Timers; using TrackerBridge.DSP; namespace GazeWebSocketServer { public class Program { private static GazeServer gazeServer; private static GazeDecimatorFixedLength decimator = new GazeDecimatorFixedLength(1, 600); public static void Main(string[] args) { ConfigurationData.InitializeUnexistingWithDefaults(); ConfigurationData config = ConfigurationData.ParseToObject(); if (args.Length > 0 && args[0] == "-d") { Task.Run(() => SimulateGazeDataHz(600)); } else { TobiiEyeTracker tobiiEyeTracker = new TobiiEyeTracker(config.TrackerSerialNumber); tobiiEyeTracker.ConnectionEvent += OnConnectionEstablished; tobiiEyeTracker.ConnectionTimeout += OnConnectionTimeout; tobiiEyeTracker.GazeDataAvailable += OnGazeDataAvailable; tobiiEyeTracker.Connect(); } gazeServer = new GazeServer(config.WebSocketPort, config.WebSocketEndpoint); gazeServer.Start(); Console.ReadLine(); } private static void SimulateGazeDataHz(Int32 frequency) { System.Timers.Timer timer = new System.Timers.Timer(1000.0/frequency); timer.Elapsed += (Object sender, ElapsedEventArgs e) => { Point mousePosition = Control.MousePosition; GazeData data = new GazeData(mousePosition.X, mousePosition.Y, mousePosition.X, mousePosition.Y, 0, 0); if (gazeServer != null && gazeServer.isRunning) { decimator.Input(data); if(decimator.Output.HasValue) gazeServer.Publish(data); } }; timer.AutoReset = true; timer.Start(); } private static void OnGazeDataAvailable(TobiiEyeTracker sender, GazeData data) { if (gazeServer != null && gazeServer.isRunning) { gazeServer.Publish(data); } } private static void OnConnectionTimeout(TobiiEyeTracker sender) { Console.WriteLine("Timeout while searching for trackers."); } private static void OnConnectionEstablished(TobiiEyeTracker sender) { Console.WriteLine($"Tracker {sender.SerialNumber} connected."); ConfigurationData config = ConfigurationData.ParseToObject(); sender.SetTrackingFrequency(config.TrackerFrequency); } } }