protected override void OnStart(string[] args) { int port = int.Parse(ConfigurationManager.AppSettings["WebSocketServerPort"]); _wsServerWrapper = new WebSocketServerWrapper(port: port); _userManager = new UserManager(_wsServerWrapper); _wsServerWrapper.Start(); Trace.TraceInformation("Started server on {0}:{1}", IPAddress.Any, port); _nmsWrapper = new NMSWrapper(_userManager, _cancellationTokenSource); _cacheController = new CacheController(_nmsWrapper, _wsServerWrapper, _userManager); _nmsTask = _nmsWrapper.Start(); _nmsTimer = new Timer((s) => { if (_cancellationTokenSource.IsCancellationRequested) { Trace.TraceError("Cancellation Requested"); ExitCode = -1; throw new OperationCanceledException(_cancellationTokenSource.Token); } else if (_nmsTask.IsFaulted) { Trace.TraceError("NMS Task Faulted: {0}", _nmsTask.Exception); ExitCode = -1; throw _nmsTask.Exception; } else if (_nmsTask.IsCompleted) { Trace.TraceInformation("NMS Task Finished"); Stop(); } }, null, TimeSpan.Zero, TimeSpan.FromSeconds(30)); }