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); }
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(); }