public HeadTrackingProxy ConnectHeadTrackingProxy() { if (headTrackingProxy == null) { // Request headtracking endpoint address bool success = controlSocket.TrySendAsJson(new RequestEndpoint(EndpointNames.HeadTracking), 1000); if (!success) { HandleControlConnectionException(new Exception("API server timeout.")); } EndpointCreated response; success = controlSocket.TryReceiveJson(out response, 1000); if (!success) { HandleControlConnectionException(new Exception("API server timeout.")); } if (response.Code == (int)ControlResponseCode.InUse) { HandleControlConnectionException(new Exception("API already in use by another client.")); } // Initialize the proxy headTrackingProxy = new HeadTrackingProxy(response.EndpointAddress, false); } return(headTrackingProxy); }
// TODO Refactor 3 methods above (DRY) /// <summary> /// Closes head tracking API connection and lets other API clients use it. /// </summary> public void DisconnectHeadTrackingProxy() { if (headTrackingProxy == null) { return; } headTrackingProxy.Disconnect(); headTrackingProxy = null; }
private void ConnectOrReconnect() { try { // Close active connections (if restarting) _apiClient.DisconnectHeadTrackingProxy(); _apiClient.DisconnectControllerProxy(); _apiClient.DisconnectBroadcastProxy(); // Give it some time to clean up Thread.Sleep(10); // Connect to the services _headTrackingProxy = _apiClient.ConnectHeadTrackingProxy(); _broadCastProxy = _apiClient.ConnectToBroadcaster(); _headTrackingProxy.ChangeTrackingState(true); } catch (Exception x) { Console.WriteLine($"Error: {x.Message}"); } }
public TrackingService(HeadTrackingProxy proxy) { this.proxy = proxy; }