Ejemplo n.º 1
0
    private async ValueTask ConnectAsync(CancellationToken cancellationToken = default)
    {
        if (!_listenAddress.TryGetTcpEndpoint(out var ipAddress, out var port))
        {
            throw new Exception("address is invalid format.");
        }

        var bytesPool = BytesPool.Shared;

        _socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        await _socket.ConnectAsync(new IPEndPoint(ipAddress, port), TimeSpan.FromSeconds(3), cancellationToken);

        _cap = new SocketCap(_socket);

        _batchActionDispatcher = new BatchActionDispatcher(TimeSpan.FromMilliseconds(10));

        var bridgeConnectionOptions = new BridgeConnectionOptions(int.MaxValue);

        _bridgeConnection = new BridgeConnection(_cap, null, null, _batchActionDispatcher, bytesPool, bridgeConnectionOptions);

        var multiplexerOptions = new MultiplexerV1.OmniConnectionMultiplexerOptions(OmniConnectionMultiplexerType.Connected, TimeSpan.FromMilliseconds(1000 * 10), 10, uint.MaxValue, 10);

        _multiplexer = OmniConnectionMultiplexer.CreateV1(_bridgeConnection, _batchActionDispatcher, bytesPool, multiplexerOptions);

        await _multiplexer.HandshakeAsync(cancellationToken);

        var rocketRemotingCallerFactory = new RocketRemotingCallerFactory <DefaultErrorMessage>(_multiplexer, bytesPool);

        _axisServiceRemotingClient = new AxisServiceRemoting.Client <DefaultErrorMessage>(rocketRemotingCallerFactory, bytesPool);
    }
Ejemplo n.º 2
0
    public async Task SimpleFunctionTest()
    {
        var(clientSocket, serverSocket) = SocketHelper.GetSocketPair();

        var bytesPool             = BytesPool.Shared;
        var batchActionDispatcher = new BatchActionDispatcher(TimeSpan.FromMilliseconds(10));

        var bridgeConnectionOptions = new BridgeConnectionOptions(1024 * 1024 * 256);

        await using var clientBridgeConnection = new BridgeConnection(new SocketCap(clientSocket), null, null, batchActionDispatcher, BytesPool.Shared, bridgeConnectionOptions);
        await using var serverBridgeConnection = new BridgeConnection(new SocketCap(serverSocket), null, null, batchActionDispatcher, BytesPool.Shared, bridgeConnectionOptions);

        var clientMultiplexerOption = new OmniConnectionMultiplexerOptions(OmniConnectionMultiplexerType.Connected, TimeSpan.FromMinutes(1), 3, 1024 * 1024 * 256, 3);

        await using var clientMultiplexer = OmniConnectionMultiplexer.CreateV1(clientBridgeConnection, batchActionDispatcher, BytesPool.Shared, clientMultiplexerOption);

        var serverMultiplexerOption = new OmniConnectionMultiplexerOptions(OmniConnectionMultiplexerType.Accepted, TimeSpan.FromMinutes(1), 3, 1024 * 1024 * 256, 3);

        await using var serverMultiplexer = OmniConnectionMultiplexer.CreateV1(serverBridgeConnection, batchActionDispatcher, BytesPool.Shared, serverMultiplexerOption);

        var clientMultiplexerHandshakeTask = clientMultiplexer.HandshakeAsync().AsTask();
        var serverMultiplexerHandshakeTask = serverMultiplexer.HandshakeAsync().AsTask();
        await Task.WhenAll(clientMultiplexerHandshakeTask, serverMultiplexerHandshakeTask);

        var mockTestService = new Mock <ITestService>();

        mockTestService.Setup(n => n.Unary1Async(It.IsAny <TestParam>(), It.IsAny <CancellationToken>())).Returns(new ValueTask <TestResult>(new TestResult(1)));

        var remotingConnector = new RocketRemotingCallerFactory <DefaultErrorMessage>(clientMultiplexer, bytesPool);
        var remotingAccepter  = new RocketRemotingListenerFactory <DefaultErrorMessage>(serverMultiplexer, DefaultErrorMessageFactory.Default, bytesPool);

        var client = new TestServiceRemoting.Client <DefaultErrorMessage>(remotingConnector, bytesPool);
        var server = new TestServiceRemoting.Server <DefaultErrorMessage>(mockTestService.Object, remotingAccepter, bytesPool);

        var cancellationTokenSource = new CancellationTokenSource();
        var eventLoop = server.EventLoopAsync(cancellationTokenSource.Token);

        var testResult1 = await client.Unary1Async(new TestParam(1), default);

        mockTestService.Verify(n => n.Unary1Async(new TestParam(1), default), Times.AtMostOnce());

        cancellationTokenSource.Cancel();
        await Assert.ThrowsAsync <TaskCanceledException>(async() => await eventLoop);

        cancellationTokenSource.Dispose();
    }