/// <summary> /// Initializes common resources. /// </summary> /// <param name="container">The composition container.</param> protected void EtpSetUp(IContainer container) { _container = container; // Clean up any remaining resources _client?.Dispose(); _server?.Dispose(); // Get next available port number var listener = new TcpListener(IPAddress.Loopback, 0); listener.Start(); var port = ((IPEndPoint)listener.LocalEndpoint).Port; listener.Stop(); // Update EtpServerUrl setting var uri = new Uri(TestSettings.EtpServerUrl); var url = TestSettings.EtpServerUrl.Replace($":{uri.Port}", $":{port}"); // Create server and client instances _server = CreateServer(port); _client = InitClient(CreateClient(url)); // Resolve dependencies early to avoid object disposed var streaming = container.Resolve <IChannelStreamingProducer>(); var discovery = container.Resolve <IDiscoveryStore>(); var store = container.Resolve <IStoreStore>(); // Register server handlers _server.Register(() => streaming); _server.Register(() => discovery); _server.Register(() => store); }
/// <summary> /// Creates an <see cref="EtpSocketServer"/> instance. /// </summary> /// <param name="port">The port number.</param> /// <returns>A new <see cref="EtpSocketServer"/> instance.</returns> protected EtpSocketServer CreateServer(int port) { var version = GetType().Assembly.GetName().Version.ToString(); var server = new EtpSocketServer(port, GetType().AssemblyQualifiedName, version); server.Output = server.Logger.Info; return(server); }
private async Task InitChannelStreaming(CancellationToken token) { using (var server = new EtpSocketServer(Model.PortNumber, ((IScreen)Parent).DisplayName, Model.Version)) { server.Register(InitChannelStreamingProvider); server.Register(InitDiscoveryProvider); server.Start(); Log("ETP Socket Server started, listening on port {0}.", Model.PortNumber); while (true) { await Task.Delay(250); if (token.IsCancellationRequested) { break; } } } }