public async Task Example() { // Create a server using a random available port on the local machine. IRxSocketServer server = RxSocketServer.Create(); // Start accepting connections from clients. server.AcceptAllAsync().ToObservableFromAsyncEnumerable().Subscribe(acceptClient => { // After the server accepts a client connection, // start receiving messages from the client and ... acceptClient.ReceiveAllAsync().ToObservableFromAsyncEnumerable().ToStrings().Subscribe(message => { // echo each message received back to the client. acceptClient.Send(message.ToByteArray()); }); }); // Find the address of the server. var ipEndPoint = server.IPEndPoint; // Create a client by connecting to the server. IRxSocketClient client = await ipEndPoint.CreateRxSocketClientAsync(); // Send the message "Hello" to the server, which the server will then echo back to the client. client.Send("Hello!".ToByteArray()); // Receive the message from the server. string message = await client.ReceiveAllAsync().ToStrings().FirstAsync(); Assert.Equal("Hello!", message); await client.DisposeAsync(); await server.DisposeAsync(); }
protected async override Task ExecuteAsync(CancellationToken cancellationToken) { logger.LogInformation("UniFeeder starting..."); var end = new IPEndPoint(IPAddress.Parse(option.Value.Ip), option.Value.Port); this.server = end.CreateRxSocketServer(); UniFeederServer(server); Loop(token: cancellationToken); await Task.CompletedTask; logger.LogInformation("UniFeeder started"); }
public RxSocketClientServerTest(ITestOutputHelper output) : base(output) { Server = RxSocketServer.Create(IPEndPoint, SocketServerLogger); AcceptTask = Server.AcceptObservable.FirstAsync().ToTask(); }
protected void UniFeederServer(IRxSocketServer server) { server.AcceptObservable.Subscribe(onNext: accept => { @"> Universal DDE Connector 9.00 > Copyright 1999 - 2008 MetaQuotes Software Corp. > Login: "******"accepted new client {0}", clientId); accept.ReceiveObservable.ToUniFeederStrings().Subscribe( onNext: message => { logger.LogDebug("client: {0} receive message: {1}", clientId, message); if (!clients.ContainsKey(clientId) && DateTimeOffset.UtcNow >= ended) { accept.Dispose(); logger.LogInformation("a non-authenticated client {0} is disconnected after 5 seconds inactivity", clientId); return; } if (!auth.IsFilled) { FillAuth(accept, auth, message); } if (auth.IsFilled) { if (Authentificate(auth)) { if (clients.TryAdd(clientId, accept)) { "> Access granted".ToUniFeederByteArray().SendTo(accept); } else { switch (message) { case "> Ping": "> Ping".ToUniFeederByteArray().SendTo(accept); logger.LogDebug("send Ping to client {0}", clientId); break; default: break; } } } else { "> Access denied".ToUniFeederByteArray().SendTo(accept); accept.Dispose(); } } }, onError: e => { RemoveClient(clientId, 5); logger.LogError("client: {0} rxsocket error {1}. client disposed. current clients: {2}", clientId, e.Message, clients.Count); }, onCompleted: () => { RemoveClient(clientId, 5); logger.LogInformation("client: {0} rxsocket complited. client disposed. current clients: {1}", clientId, clients.Count); } ); }); }
internal Server(ILogger logger, ILogger libLogger) { Logger = logger; SocketServer = RxSocketServer.Create(libLogger); }