Esempio n. 1
0
 private static void ConfigureSocket(Socket socket, SolarWindHubOptions options)
 {
     socket.NoDelay        = options.NoDelay;
     socket.ReceiveTimeout = (int)options.ReceiveTimeout.TotalMilliseconds;
     socket.SendTimeout    = (int)options.SendTimeout.TotalMilliseconds;
     socket.LingerState    = new LingerOption(true, 1);
 }
Esempio n. 2
0
        public static async Task Accept(SolarWindHubOptions options, Socket socket, Action <HubId, Connection> onAccepted)
        {
            ConfigureSocket(socket, options);
            var networkStream = new AsyncNetworkStream(socket);
            //SslStream sslStream = null;

            //if (certificate != null)
            //{
            //    sslStream = new SslStream(networkStream, false);
            //    await sslStream
            //        .AuthenticateAsServerAsync(certificate, false, SslProtocols.Tls12, true)
            //        .ConfigureAwait(false);

            //    if (!sslStream.IsAuthenticated)
            //    {
            //        sslStream.Close();
            //        return null;
            //    }
            //}


            HandshakeMessage incoming = await networkStream
                                        .HandshakeAsServer(options.HubId)
                                        .ConfigureAwait(false);

            var connection = new Connection(networkStream, options.LoggerFactory.CreateLogger <Connection>());

            onAccepted(incoming.HubId, connection);
        }
Esempio n. 3
0
        public Listener(SolarWindHubOptions hubOptions)
        {
            _hubOptions = hubOptions;
            _listener   = Build.TcpIPv4();
            _args       = new SocketAsyncEventArgs();

            _logger = hubOptions.LoggerFactory.CreateLogger <Listener>();
        }
Esempio n. 4
0
        public static async void ConnectTo(SolarWindHubOptions options, Uri remoteUri, ILogger logger, Action <Uri, HubId, Connection> onConnected)
        {
            Socket socket = Build.TcpIPv4();

            ConfigureSocket(socket, options);

            while (true)
            {
                try
                {
                    await socket
                    .ConnectAsync(remoteUri.ResolveRemoteEndpoint())
                    .ConfigureAwait(false);

                    break;
                }
                catch (SocketException e)
                {
                    if (logger.IsEnabled(LogLevel.Trace))
                    {
                        logger.LogTrace(e, $"Cannot connect to '{remoteUri}");
                    }

                    await Task.Delay(5000).ConfigureAwait(false);
                }
            }


            var networkStream = new AsyncNetworkStream(socket);
            //SslStream sslStream = null;
            //if (remoteUri.UseTls())
            //{
            //    sslStream = new SslStream(networkStream, false);
            //    await sslStream
            //        .AuthenticateAsClientAsync(remoteUri.Host)
            //        .ConfigureAwait(false);

            //    if (!sslStream.IsAuthenticated)
            //    {
            //        sslStream.Close();
            //        return null;
            //    }
            //}

            HandshakeMessage handshakeResponse = await networkStream
                                                 .HandshakeAsClient(options.HubId)
                                                 .ConfigureAwait(false);

            var connection = new Connection(networkStream, logger);

            onConnected(remoteUri, handshakeResponse.HubId, connection);
        }
Esempio n. 5
0
        public void Setup()
        {
            _serverUri = new Uri("tcp://localhost:4312");

            var jsonNetSerializer = new JsonNetSerializer();

            var solarWindHubOptions = new SolarWindHubOptions(TestContext.LoggerFactory);

            _server = new SolarWindHub(solarWindHubOptions);

            _server.Listen(new ServerOptions(_serverUri, _ => new ChannelOptions(jsonNetSerializer, OnServerCallback), delegate { }));

            var clientOptions = new SolarWindHubOptions(TestContext.LoggerFactory);

            _client          = new SolarWindHub(clientOptions);
            _channelToServer = _client.OpenChannelTo(_serverUri, new ChannelOptions(jsonNetSerializer, OnClientCallback));

            _serverReceivedMessage = new ManualResetEvent(false);
            _clientReceivedMessage = new ManualResetEvent(false);
        }
Esempio n. 6
0
        public void Setup()
        {
            _serializer = new JsonNetSerializer();
            var options = new SolarWindHubOptions(TestContext.LoggerFactory);

            _hub = new SolarWindHub(options);
            _uri = new Uri("tcp://localhost:4312");
            _hub.Listen(new ServerOptions(_uri, _ => new ChannelOptions(_serializer, OnCallback), delegate { }));


            var header = new MessageHeader(new MessageTypeId(1), MessageId.Empty, MessageId.Empty);
            var data   = new TextMessage {
                Text = "Greetings"
            };

            _messageBuffer = new MemoryStream();

            _serializer.SerializeMessage(_messageBuffer, in header, data);

            _clientHubId = new HubId("client");
        }
        public void Setup()
        {
            _serverUri = new Uri("tcp://localhost:4312");
            _endpoint  = new IPEndPoint(IPAddress.Loopback, _serverUri.Port);
            var jsonNetSerializer = new JsonNetSerializer();

            _listener = Build.TcpIPv4();
            _listener.Bind(_endpoint);
            _listener.Listen(10);
            Task.Run(StartListener);

            var clientOptions = new SolarWindHubOptions(TestContext.LoggerFactory);

            _client          = new SolarWindHub(clientOptions);
            _channelToServer = _client.OpenChannelTo(_serverUri, new ChannelOptions(jsonNetSerializer, delegate { }));

            _count = 1_000_000;

            _serverReceived = 0;

            _allMessagesReceived = new ManualResetEvent(false);
        }