Esempio n. 1
0
        private async Task <ProxyHost> CreateProxyHostAsync(CancellationToken cancellation)
        {
            var tcpClient = await _tcpClientLazy.Task.WithCancellation(cancellation);

            var logger = _loggerFactory?.CreateLogger <DisposeAwareStream>();

            // TODO: Graceful shutdown
            var stream = new DisposeAwareStream(tcpClient.GetStream(), () => { Environment.FailFast(""); return(Task.CompletedTask); }, logger);

            var endPoint = _remoteOptions.LocalEndPoint;
            var metadata = await _metadataAccessor.GetMetadataAsync(cancellation);

            var module  = metadata.Module;
            var version = metadata.Version;

            var properties = new DebugModuleProperties(endPoint, module, version);
            await properties.WriteAsync(stream, cancellation);

            return(new ProxyHost(stream, _serviceProvider));
        }
Esempio n. 2
0
            public DebugSession(DebugPort debugServer,
                                TcpClient tcpClient,
                                IServiceProvider serviceProvider,
                                ILoggerFactory loggerFactory)
            {
                if (debugServer == null)
                {
                    throw new ArgumentNullException(nameof(debugServer));
                }

                if (tcpClient == null)
                {
                    throw new ArgumentNullException(nameof(tcpClient));
                }

                if (serviceProvider == null)
                {
                    throw new ArgumentNullException(nameof(serviceProvider));
                }

                _debugServer     = debugServer;
                _tcpClient       = tcpClient;
                Address          = tcpClient.Client.RemoteEndPoint as IPEndPoint;
                _serviceProvider = serviceProvider;
                _loggerFactory   = loggerFactory;

                _logger = _loggerFactory?.CreateLogger <DebugSession>();
                var streamLogger = _loggerFactory?.CreateLogger <DisposeAwareStream>();

                _stream = new DisposeAwareStream(_tcpClient.GetStream(), OnDebugStreamsCloses, streamLogger);

                _propertiesLazy = new DisposableAsyncLazy <DebugModuleProperties>(
                    factory: CreatePropertiesAsync,
                    disposal: DisposePropertiesAsync,
                    options: DisposableAsyncLazyOptions.Autostart | DisposableAsyncLazyOptions.ExecuteOnCallingThread);

                _proxyHostLazy = new DisposableAsyncLazy <ProxyHost>(
                    factory: CreateProxyHostAsync,
                    disposal: proxyHost => proxyHost.DisposeAsync(),
                    options: DisposableAsyncLazyOptions.Autostart | DisposableAsyncLazyOptions.ExecuteOnCallingThread);
            }