예제 #1
0
    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();
    }
예제 #2
0
        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");
        }
예제 #3
0
 public RxSocketClientServerTest(ITestOutputHelper output) : base(output)
 {
     Server     = RxSocketServer.Create(IPEndPoint, SocketServerLogger);
     AcceptTask = Server.AcceptObservable.FirstAsync().ToTask();
 }
예제 #4
0
        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);
                }
                    );
            });
        }
예제 #5
0
파일: Server.cs 프로젝트: dshe/InterReact
 internal Server(ILogger logger, ILogger libLogger)
 {
     Logger       = logger;
     SocketServer = RxSocketServer.Create(libLogger);
 }