예제 #1
0
            private async Task <ClusterMaintenanceConnection> ConnectToClientNodeAsync(TcpConnectionInfo tcpConnectionInfo, TimeSpan timeout)
            {
                TcpConnectionHeaderMessage.SupportedFeatures supportedFeatures;
                TcpClient tcpClient;
                string    url;

                (tcpClient, url) = await TcpUtils.ConnectSocketAsync(tcpConnectionInfo, timeout, _log);

                var connection = await TcpUtils.WrapStreamWithSslAsync(tcpClient, tcpConnectionInfo, _parent._server.Server.Certificate.Certificate, _parent._server.Server.CipherSuitesPolicy, timeout);

                using (_contextPool.AllocateOperationContext(out JsonOperationContext ctx))
                    await using (var writer = new AsyncBlittableJsonTextWriter(ctx, connection))
                    {
                        var parameters = new AsyncTcpNegotiateParameters
                        {
                            Database  = null,
                            Operation = TcpConnectionHeaderMessage.OperationTypes.Heartbeats,
                            Version   = TcpConnectionHeaderMessage.HeartbeatsTcpVersion,
                            ReadResponseAndGetVersionCallbackAsync = SupervisorReadResponseAndGetVersionAsync,
                            DestinationUrl     = url,
                            DestinationNodeTag = ClusterTag
                        };
                        supportedFeatures = await TcpNegotiation.NegotiateProtocolVersionAsync(ctx, connection, parameters);

                        await WriteClusterMaintenanceConnectionHeaderAsync(writer);
                    }

                return(new ClusterMaintenanceConnection
                {
                    TcpClient = tcpClient,
                    Stream = connection,
                    SupportedFeatures = supportedFeatures
                });
            }
예제 #2
0
            private async Task <TcpConnectionHeaderMessage.SupportedFeatures> NegotiateProtocolVersionAsyncForClusterSupervisor(string url, TcpConnectionInfo info, Stream stream, JsonOperationContext context, List <string> _)
            {
                var parameters = new AsyncTcpNegotiateParameters
                {
                    Database  = null,
                    Operation = TcpConnectionHeaderMessage.OperationTypes.Heartbeats,
                    Version   = TcpConnectionHeaderMessage.HeartbeatsTcpVersion,
                    ReadResponseAndGetVersionCallbackAsync = SupervisorReadResponseAndGetVersionAsync,
                    DestinationUrl      = url,
                    DestinationNodeTag  = ClusterTag,
                    DestinationServerId = info.ServerId
                };

                return(await TcpNegotiation.NegotiateProtocolVersionAsync(context, stream, parameters));
            }