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); }
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); }
public Listener(SolarWindHubOptions hubOptions) { _hubOptions = hubOptions; _listener = Build.TcpIPv4(); _args = new SocketAsyncEventArgs(); _logger = hubOptions.LoggerFactory.CreateLogger <Listener>(); }
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); }
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); }
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); }