From 27325516643efef8c440978e138c7902227d8c57 Mon Sep 17 00:00:00 2001 From: Stefan Schreistetter Date: Tue, 20 Aug 2019 17:24:10 +0200 Subject: [PATCH] Intermediate version. Added functionality to broadcast gaze data to all connected sessions. --- GazeWebSocketServer/EyeTrackerClient.cs | 12 ++++++++++-- GazeWebSocketServer/GazeCoordinateBehavior.cs | 25 ++++++++++++++++++++++--- GazeWebSocketServer/Program.cs | 5 +---- 3 files changed, 33 insertions(+), 9 deletions(-) diff --git a/GazeWebSocketServer/EyeTrackerClient.cs b/GazeWebSocketServer/EyeTrackerClient.cs index 61a6101..db4a332 100644 --- a/GazeWebSocketServer/EyeTrackerClient.cs +++ b/GazeWebSocketServer/EyeTrackerClient.cs @@ -11,9 +11,11 @@ namespace GazeWebSocketServer { private IEyeTracker eyeTracker; private GazeDataProcessor gazeDataProcessor; + private List gazeCoordinateBehaviors; public EyeTrackerClient() { + gazeCoordinateBehaviors = new List(); while (eyeTracker == null) { EyeTrackerCollection eyeTrackers = EyeTrackingOperations.FindAllEyeTrackers(); @@ -26,8 +28,9 @@ namespace GazeWebSocketServer eyeTracker.SetGazeOutputFrequency(120f); } - public void Start() + public void Start(GazeCoordinateBehavior gazeCoordinateBehavior) { + gazeCoordinateBehaviors.Add(gazeCoordinateBehavior); eyeTracker.GazeDataReceived += GazeDataReceivedHandler; } @@ -38,7 +41,12 @@ namespace GazeWebSocketServer private void GazeDataReceivedHandler(object sender, GazeDataEventArgs e) { - Console.WriteLine(gazeDataProcessor.Extract(e).ToString()); + GazeData gazeData = gazeDataProcessor.Extract(e); + foreach(GazeCoordinateBehavior behavior in gazeCoordinateBehaviors) + { + behavior.Publish(gazeData); + } + Console.WriteLine(gazeData.ToString()); } } } \ No newline at end of file diff --git a/GazeWebSocketServer/GazeCoordinateBehavior.cs b/GazeWebSocketServer/GazeCoordinateBehavior.cs index 23ae0dc..621366a 100644 --- a/GazeWebSocketServer/GazeCoordinateBehavior.cs +++ b/GazeWebSocketServer/GazeCoordinateBehavior.cs @@ -8,10 +8,29 @@ namespace GazeWebSocketServer { public class GazeCoordinateBehavior : WebSocketBehavior { - protected override void OnOpen() + private EyeTrackerClient eyeTrackerClient; + + public GazeCoordinateBehavior() + { + Console.WriteLine("Creating behavior..."); + eyeTrackerClient = new EyeTrackerClient(); + eyeTrackerClient.Start(this); + } + + ~GazeCoordinateBehavior() + { + eyeTrackerClient.Stop(); + } + + //protected override void OnOpen() + //{ + // throw new NotImplementedException(); + // //base.OnOpen(); + //} + + internal void Publish(GazeData gazeData) { - throw new NotImplementedException(); - //base.OnOpen(); + Sessions.Broadcast(gazeData.ToString()); } } } diff --git a/GazeWebSocketServer/Program.cs b/GazeWebSocketServer/Program.cs index b758d53..8ccad82 100644 --- a/GazeWebSocketServer/Program.cs +++ b/GazeWebSocketServer/Program.cs @@ -10,14 +10,11 @@ namespace GazeWebSocketServer public static void Main(string[] args) { var wssv = new WebSocketServer("ws://localhost:8001"); - wssv.AddWebSocketService("/gaze"); - EyeTrackerClient eyeTrackerClient = new EyeTrackerClient(); + wssv.AddWebSocketService("/gaze", () => new GazeCoordinateBehavior()); - eyeTrackerClient.Start(); wssv.Start(); Console.ReadKey(true); wssv.Stop(); - eyeTrackerClient.Stop(); } } } \ No newline at end of file -- libgit2 0.26.0