From 3c0d23892d9abb1af478af4f031138ee744c8778 Mon Sep 17 00:00:00 2001 From: Stefan Schreistetter Date: Tue, 27 Aug 2019 12:34:54 +0200 Subject: [PATCH] Added logic to provide configuration parameters in app.config-file. From now on the application only continues if the defined serial number matches the number of the connected tracker. --- GazeWebSocketServer/App.config | 7 +++++++ GazeWebSocketServer/ClassDiagram1.cd | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ GazeWebSocketServer/ConfigurationData.cs | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ GazeWebSocketServer/EyeTrackerClient.cs | 12 +++++++++--- GazeWebSocketServer/GazeCoordinateBehavior.cs | 4 ++-- GazeWebSocketServer/GazeWebSocketServer.csproj | 3 +++ GazeWebSocketServer/Program.cs | 9 ++++++--- 7 files changed, 138 insertions(+), 8 deletions(-) create mode 100644 GazeWebSocketServer/ClassDiagram1.cd create mode 100644 GazeWebSocketServer/ConfigurationData.cs diff --git a/GazeWebSocketServer/App.config b/GazeWebSocketServer/App.config index 56efbc7..2a61590 100644 --- a/GazeWebSocketServer/App.config +++ b/GazeWebSocketServer/App.config @@ -1,5 +1,12 @@  + + + + + + + diff --git a/GazeWebSocketServer/ClassDiagram1.cd b/GazeWebSocketServer/ClassDiagram1.cd new file mode 100644 index 0000000..6f744df --- /dev/null +++ b/GazeWebSocketServer/ClassDiagram1.cd @@ -0,0 +1,52 @@ + + + + + + gEAAQAAAAAAAYAAAAAAAAAAQAAAgBAAAAAAAAAAAAAA= + ConfigurationData.cs + + + + + + AAAAAAAAACAAAAAABAAAAAAEAQAAAAAAIAAAAAAAAAA= + EyeTrackerClient.cs + + + + + + + + + AAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAgAAAAAAAAAA= + GazeCoordinateBehavior.cs + + + + + + + + + AAAAAAAAAABAQAAAAAAAAAAAAAAAAAAAAAAAQAAAAAA= + GazeDataProcessor.cs + + + + + + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAA= + Program.cs + + + + + + QAAAAAAAAAAAAAAEAAgAAAAAAAAAAAAAAAAAAAAAgAA= + GazeData.cs + + + + \ No newline at end of file diff --git a/GazeWebSocketServer/ConfigurationData.cs b/GazeWebSocketServer/ConfigurationData.cs new file mode 100644 index 0000000..13beb98 --- /dev/null +++ b/GazeWebSocketServer/ConfigurationData.cs @@ -0,0 +1,59 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Configuration; + +namespace GazeWebSocketServer +{ + public class ConfigurationData + { + public string TrackerSerialNumber { get; private set; } + public float TrackerFrequency { get; private set; } + public int WebSocketPort { get; private set; } + public string WebSocketEndpoint { get; private set; } + public bool DebugFlag { get; private set; } + + public static ConfigurationData ParseToObject() + { + ConfigurationData result = new ConfigurationData + { + TrackerSerialNumber = ConfigurationManager.AppSettings["TrackerSerialNumber"], + TrackerFrequency = float.Parse(ConfigurationManager.AppSettings["TrackerFrequency_Hz"]), + WebSocketPort = int.Parse(ConfigurationManager.AppSettings["WebSocketPort"]), + WebSocketEndpoint = ConfigurationManager.AppSettings["WebSocketEndpoint"], + DebugFlag = bool.Parse(ConfigurationManager.AppSettings["DebugFlag"]) + }; + return result; + } + + public static void InitializeUnexistingWithDefaults() + { + InitializeSetting("TrackerSerialNumber", ""); + InitializeSetting("TrackerFrequency_Hz", "600"); + InitializeSetting("WebSocketPort", "8001"); + InitializeSetting("WebSocketEndpoint", "/gaze"); + InitializeSetting("DebugFlag", "false"); + } + + private static void InitializeSetting(string key, string value) + { + try + { + var configFile = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); + var settings = configFile.AppSettings.Settings; + if (settings[key] == null) + { + settings.Add(key, value); + } + configFile.Save(ConfigurationSaveMode.Modified); + ConfigurationManager.RefreshSection(configFile.AppSettings.SectionInformation.Name); + } + catch (ConfigurationErrorsException) + { + Console.WriteLine("Error writing app settings"); + } + } + } +} diff --git a/GazeWebSocketServer/EyeTrackerClient.cs b/GazeWebSocketServer/EyeTrackerClient.cs index db4a332..91f84ab 100644 --- a/GazeWebSocketServer/EyeTrackerClient.cs +++ b/GazeWebSocketServer/EyeTrackerClient.cs @@ -13,7 +13,7 @@ namespace GazeWebSocketServer private GazeDataProcessor gazeDataProcessor; private List gazeCoordinateBehaviors; - public EyeTrackerClient() + public EyeTrackerClient(ConfigurationData config) { gazeCoordinateBehaviors = new List(); while (eyeTracker == null) @@ -21,11 +21,17 @@ namespace GazeWebSocketServer EyeTrackerCollection eyeTrackers = EyeTrackingOperations.FindAllEyeTrackers(); if (eyeTrackers.Count > 0) { - eyeTracker = eyeTrackers[0]; + foreach(IEyeTracker t in eyeTrackers) + { + if(config.TrackerSerialNumber == t.SerialNumber) + { + eyeTracker = t; + } + } } } gazeDataProcessor = new GazeDataProcessor(); - eyeTracker.SetGazeOutputFrequency(120f); + eyeTracker.SetGazeOutputFrequency(config.TrackerFrequency); } public void Start(GazeCoordinateBehavior gazeCoordinateBehavior) diff --git a/GazeWebSocketServer/GazeCoordinateBehavior.cs b/GazeWebSocketServer/GazeCoordinateBehavior.cs index bce48af..09738ed 100644 --- a/GazeWebSocketServer/GazeCoordinateBehavior.cs +++ b/GazeWebSocketServer/GazeCoordinateBehavior.cs @@ -10,10 +10,10 @@ namespace GazeWebSocketServer { private EyeTrackerClient eyeTrackerClient; - public GazeCoordinateBehavior() + public GazeCoordinateBehavior(ConfigurationData config) { Console.WriteLine("Creating behavior..."); - eyeTrackerClient = new EyeTrackerClient(); + eyeTrackerClient = new EyeTrackerClient(config); eyeTrackerClient.Start(this); } diff --git a/GazeWebSocketServer/GazeWebSocketServer.csproj b/GazeWebSocketServer/GazeWebSocketServer.csproj index ae1f7cd..b75a431 100644 --- a/GazeWebSocketServer/GazeWebSocketServer.csproj +++ b/GazeWebSocketServer/GazeWebSocketServer.csproj @@ -37,6 +37,7 @@ + @@ -52,6 +53,7 @@ + @@ -61,6 +63,7 @@ + diff --git a/GazeWebSocketServer/Program.cs b/GazeWebSocketServer/Program.cs index 2c5b41e..8bd4a4a 100644 --- a/GazeWebSocketServer/Program.cs +++ b/GazeWebSocketServer/Program.cs @@ -9,9 +9,12 @@ namespace GazeWebSocketServer { public static void Main(string[] args) { - var wssv = new WebSocketServer(8001); - GazeCoordinateBehavior behavior = new GazeCoordinateBehavior(); - wssv.AddWebSocketService("/gaze", () => behavior); + ConfigurationData.InitializeUnexistingWithDefaults(); + ConfigurationData config = ConfigurationData.ParseToObject(); + + var wssv = new WebSocketServer(config.WebSocketPort); + GazeCoordinateBehavior behavior = new GazeCoordinateBehavior(config); + wssv.AddWebSocketService(config.WebSocketEndpoint, () => behavior); wssv.Start(); Console.ReadKey(true); -- libgit2 0.26.0