예제 #1
0
 IServer IIpcProvider.GetServer(string connectionString, IServerConfig config)
 {
     return(new NonMultiplexingServer <Socket>(
                "TcpIpServer",
                config,
                new TcpIpConnectivity(TcpIpConnectivity.ParsePortNumber(connectionString))));
 }
예제 #2
0
        public async Task TestIcpIpConectToServerWhenNoServerIsRunningAsync()
        {
            using var tcpIp = new TcpIpConnectivity(port: 12345);
            var ex = await Assert.ThrowsAnyAsync <SocketException>(async() => await tcpIp.ConnectToServerAsync(numTimesToRetry: 2, delayMillis: 50));

            XAssert.IsNotNull(ex);
        }
예제 #3
0
 private async Task WithClient(TcpIpConnectivity tcpIpProvider, Func <NetworkStream, Task> action)
 {
     using (var tcpClient = await tcpIpProvider.ConnectToServerAsync())
         using (var stream = tcpClient.GetStream())
         {
             await action(stream);
         }
 }
예제 #4
0
 private async Task AssertPingServerFromNewClient(TcpIpConnectivity tcpIpProvider)
 {
     using (var tcpClient = await tcpIpProvider.ConnectToServerAsync())
         using (var stream = tcpClient.GetStream())
         {
             await AssertPingServer(stream);
         }
 }
        IServer IIpcProvider.GetServer(string connectionString, IServerConfig config)
        {
            var port = TcpIpConnectivity.ParsePortNumber(connectionString);

            return(new MultiplexingServer <Socket>(
                       "TcpIp-" + port,
                       config.Logger,
                       connectivityProvider: new TcpIpConnectivity(port),
                       maxConcurrentClients: config.MaxConcurrentClients,
                       maxConcurrentRequestsPerClient: config.MaxConcurrentRequestsPerClient));
        }
예제 #6
0
 private async Task WithSetup(string testName, Func <MultiplexingClient, Socket, Task> testAction)
 {
     using (var tcpConnectivity = new TcpIpConnectivity(Utils.GetUnusedPortNumber()))
     {
         var serverSocketTask = Task.Run(() => tcpConnectivity.AcceptClientAsync(CancellationToken.None));
         using (var tcpClient = await tcpConnectivity.ConnectToServerAsync())
             using (var serverSocket = await serverSocketTask)
             {
                 var client = new MultiplexingClient(ClientConfigWithLogger(testName), tcpClient.GetStream());
                 await testAction(client, serverSocket);
             }
     }
 }
예제 #7
0
        private PluginCreationArgument GetPluginArgument(string pluginPath, bool runInSeparateProcess)
        {
            var pluginId = PluginFactory.Instance.CreatePluginId();

            return(new PluginCreationArgument()
            {
                PluginPath = pluginPath,
                RunInSeparateProcess = runInSeparateProcess,
                PluginId = pluginId,
                ConnectionOption = new PluginConnectionOption()
                {
                    IpcMoniker = IpcFactory.GetProvider().LoadAndRenderMoniker(IpcFactory.GetProvider().CreateNewMoniker().Id),
                    LogDir = m_logDirectory,
                    Logger = PluginLogUtils.CreateLoggerForPluginClients(m_loggingContext, pluginId)
                },

                CreatePluginClientFunc = options =>
                {
                    int port = TcpIpConnectivity.ParsePortNumber(options.IpcMoniker);
                    return new PluginClient(IPAddress.Loopback.ToString(), port, options.Logger);
                }
            });
        }
예제 #8
0
 private TcpIpConnectivity CreateAndStartTcpIpProvider(ILogger logger, int numTimesToRetry = 3, int delayMillis = 250)
 {
     try
     {
         var port          = Utils.GetUnusedPortNumber();
         var tcpIpProvider = new TcpIpConnectivity(port);
         tcpIpProvider.StartListening();
         return(tcpIpProvider);
     }
     catch (SocketException e)
     {
         if (numTimesToRetry > 0)
         {
             logger.Verbose($"Could not connect; error: '{e.GetLogEventMessage()}'. Waiting {delayMillis}ms then retrying {numTimesToRetry} more times");
             Thread.Sleep(millisecondsTimeout: delayMillis);
             return(CreateAndStartTcpIpProvider(logger, numTimesToRetry - 1, delayMillis * 2));
         }
         else
         {
             logger.Verbose($"Could not connect; error: '{e.GetLogEventMessage()}'. Not retrying any more.");
             throw;
         }
     }
 }
 IClient IIpcProvider.GetClient(string connectionString, IClientConfig config)
 {
     return(new Client(config, TcpIpConnectivity.ParsePortNumber(connectionString)));
 }
예제 #10
0
        public void TestParseInvalidPortNumber(string port)
        {
            var ex = Assert.Throws <IpcException>(() => TcpIpConnectivity.ParsePortNumber(port));

            XAssert.AreEqual(IpcException.IpcExceptionKind.InvalidMoniker, ex.Kind);
        }