private ServiceHubRemoteHostClient(
            HostWorkspaceServices services,
            IServiceBroker serviceBroker,
            ServiceBrokerClient serviceBrokerClient,
            HubClient hubClient,
            Stream stream,
            IRemoteServiceCallbackDispatcherProvider callbackDispatcherProvider)
        {
            _connectionPools = new ConnectionPools(
                connectionFactory: (serviceName, pool, cancellationToken) => CreateConnectionImplAsync(serviceName, callbackTarget: null, pool, cancellationToken),
                capacity: ConnectionPoolCapacity);

            // use the hub client logger for unexpected exceptions from devenv as well, so we have complete information in the log:
            services.GetService <IWorkspaceTelemetryService>()?.RegisterUnexpectedExceptionLogger(hubClient.Logger);

            _services                            = services;
            _serviceBroker                       = serviceBroker;
            _serviceBrokerClient                 = serviceBrokerClient;
            _hubClient                           = hubClient;
            _callbackDispatcherProvider          = callbackDispatcherProvider;
            _endPoint                            = new RemoteEndPoint(stream, hubClient.Logger, incomingCallTarget: this);
            _endPoint.Disconnected              += OnDisconnected;
            _endPoint.UnexpectedExceptionThrown += OnUnexpectedExceptionThrown;
            _endPoint.StartListening();

            _assetStorage                = services.GetRequiredService <ISolutionAssetStorageProvider>().AssetStorage;
            _serializer                  = services.GetRequiredService <ISerializerService>();
            _errorReportingService       = services.GetService <IErrorReportingService>();
            _shutdownCancellationService = services.GetService <IRemoteHostClientShutdownCancellationService>();
            _isRemoteHostServerGC        = RemoteHostOptions.IsServiceHubProcessServerGC(services);
            _isRemoteHostCoreClr         = RemoteHostOptions.IsServiceHubProcessCoreClr(services);
        }
        private ServiceHubRemoteHostClient(
            HostWorkspaceServices services,
            HubClient hubClient,
            HostGroup hostGroup,
            Stream stream)
        {
            _connectionPools = new ConnectionPools(
                connectionFactory: (serviceName, pool, cancellationToken) => CreateConnectionImplAsync(serviceName, callbackTarget: null, pool, cancellationToken),
                capacity: ConnectionPoolCapacity);

            // use the hub client logger for unexpected exceptions from devenv as well, so we have complete information in the log:
            services.GetService <IWorkspaceTelemetryService>()?.RegisterUnexpectedExceptionLogger(hubClient.Logger);

            _services  = services;
            _hubClient = hubClient;
            _hostGroup = hostGroup;

            _endPoint = new RemoteEndPoint(stream, hubClient.Logger, incomingCallTarget: this);
            _endPoint.Disconnected += OnDisconnected;
            _endPoint.UnexpectedExceptionThrown += OnUnexpectedExceptionThrown;
            _endPoint.StartListening();

            _assetStorage = services.GetRequiredService <ISolutionAssetStorageProvider>().AssetStorage;
            _serializer   = services.GetRequiredService <ISerializerService>();
        }
        public static async Task WriteDataAsync(ObjectWriter writer, SolutionAssetStorage assetStorage, ISerializerService serializer, int scopeId, Checksum[] checksums, CancellationToken cancellationToken)
        {
            writer.WriteInt32(scopeId);

            // special case
            if (checksums.Length == 0)
            {
                writer.WriteInt32(0);
                return;
            }

            if (checksums.Length == 1)
            {
                var checksum = checksums[0];

                var asset = (await assetStorage.GetAssetAsync(scopeId, checksum, cancellationToken).ConfigureAwait(false)) ?? SolutionAsset.Null;
                writer.WriteInt32(1);

                WriteAsset(writer, serializer, checksum, asset, cancellationToken);
                return;
            }

            var assets = await assetStorage.GetAssetsAsync(scopeId, checksums, cancellationToken).ConfigureAwait(false);

            writer.WriteInt32(assets.Count);

            foreach (var(checksum, asset) in assets)
            {
                WriteAsset(writer, serializer, checksum, asset, cancellationToken);
            }
Ejemplo n.º 4
0
 public BrokeredServiceConnection(
     TService service,
     SolutionAssetStorage solutionAssetStorage,
     IErrorReportingService?errorReportingService,
     IRemoteHostClientShutdownCancellationService?shutdownCancellationService)
 {
     _errorReportingService       = errorReportingService;
     _shutdownCancellationService = shutdownCancellationService;
     _solutionAssetStorage        = solutionAssetStorage;
     _service = service;
 }
Ejemplo n.º 5
0
        public BrokeredServiceConnection(
            object?callbackTarget,
            ServiceBrokerClient serviceBrokerClient,
            SolutionAssetStorage solutionAssetStorage,
            IErrorReportingService?errorReportingService,
            IRemoteHostClientShutdownCancellationService?shutdownCancellationService,
            bool isRemoteHost64Bit)
        {
            _serviceBrokerClient         = serviceBrokerClient;
            _solutionAssetStorage        = solutionAssetStorage;
            _errorReportingService       = errorReportingService;
            _shutdownCancellationService = shutdownCancellationService;

            _serviceDescriptor = ServiceDescriptors.GetServiceDescriptor(typeof(TService), isRemoteHost64Bit);
            _callbackHandle    = _serviceDescriptor.CallbackDispatcher?.CreateHandle(callbackTarget) ?? default;
        }
Ejemplo n.º 6
0
        public BrokeredServiceConnection(
            ServiceDescriptor serviceDescriptor,
            object?callbackTarget,
            IRemoteServiceCallbackDispatcher?callbackDispatcher,
            ServiceBrokerClient serviceBrokerClient,
            SolutionAssetStorage solutionAssetStorage,
            IErrorReportingService?errorReportingService,
            IRemoteHostClientShutdownCancellationService?shutdownCancellationService)
        {
            Contract.ThrowIfFalse((callbackDispatcher == null) == (serviceDescriptor.ClientInterface == null));

            _serviceDescriptor           = serviceDescriptor;
            _serviceBrokerClient         = serviceBrokerClient;
            _solutionAssetStorage        = solutionAssetStorage;
            _errorReportingService       = errorReportingService;
            _shutdownCancellationService = shutdownCancellationService;
            _callbackDispatcher          = callbackDispatcher;
            _callbackHandle = callbackDispatcher?.CreateHandle(callbackTarget) ?? default;
        }
Ejemplo n.º 7
0
        public JsonRpcConnection(
            HostWorkspaceServices services,
            TraceSource logger,
            object?callbackTarget,
            Stream serviceStream,
            IPooledConnectionReclamation?poolReclamation)
        {
            _solutionAssetStorage = services.GetRequiredService <ISolutionAssetStorageProvider>().AssetStorage;
            _services             = services;

            _serviceEndPoint = new RemoteEndPoint(serviceStream, logger, callbackTarget);
            _serviceEndPoint.UnexpectedExceptionThrown += UnexpectedExceptionThrown;
            _serviceEndPoint.StartListening();

            _poolReclamation = poolReclamation;
#if DEBUG
            _creationCallStack = Environment.StackTrace;
#endif
        }
        private ServiceHubRemoteHostClient(
            HostWorkspaceServices services,
            RemoteProcessConfiguration configuration,
            ServiceBrokerClient serviceBrokerClient,
            HubClient hubClient,
            IRemoteServiceCallbackDispatcherProvider callbackDispatcherProvider)
        {
            // use the hub client logger for unexpected exceptions from devenv as well, so we have complete information in the log:
            services.GetService <IWorkspaceTelemetryService>()?.RegisterUnexpectedExceptionLogger(hubClient.Logger);

            _services                   = services;
            _serviceBrokerClient        = serviceBrokerClient;
            _hubClient                  = hubClient;
            _callbackDispatcherProvider = callbackDispatcherProvider;

            _assetStorage                = services.GetRequiredService <ISolutionAssetStorageProvider>().AssetStorage;
            _errorReportingService       = services.GetService <IErrorReportingService>();
            _shutdownCancellationService = services.GetService <IRemoteHostClientShutdownCancellationService>();
            Configuration                = configuration;
        }
Ejemplo n.º 9
0
        public BrokeredServiceConnection(
            object?callbackTarget,
            RemoteServiceCallbackDispatcherRegistry callbackDispatchers,
            ServiceBrokerClient serviceBrokerClient,
            SolutionAssetStorage solutionAssetStorage,
            IErrorReportingService?errorReportingService,
            IRemoteHostClientShutdownCancellationService?shutdownCancellationService,
            bool isRemoteHost64Bit)
        {
            _serviceBrokerClient         = serviceBrokerClient;
            _solutionAssetStorage        = solutionAssetStorage;
            _errorReportingService       = errorReportingService;
            _shutdownCancellationService = shutdownCancellationService;

            _serviceDescriptor = ServiceDescriptors.GetServiceDescriptor(typeof(TService), isRemoteHost64Bit);

            if (_serviceDescriptor.ClientInterface != null)
            {
                _callbackDispatcher = callbackDispatchers.GetDispatcher(typeof(TService));
                _callbackHandle     = _callbackDispatcher.CreateHandle(callbackTarget);
            }
        }
Ejemplo n.º 10
0
 public Scope(SolutionAssetStorage storages, PinnedSolutionInfo solutionInfo)
 {
     _storages    = storages;
     SolutionInfo = solutionInfo;
 }
Ejemplo n.º 11
0
 private SolutionAssetStorageProvider(SolutionAssetStorage storage)
 {
     AssetStorage = storage;
 }
Ejemplo n.º 12
0
 internal TestAccessor(SolutionAssetStorage solutionAssetStorage)
 {
     _solutionAssetStorage = solutionAssetStorage;
 }
Ejemplo n.º 13
0
 public BrokeredServiceConnection(TService service, SolutionAssetStorage solutionAssetStorage, IErrorReportingService errorReportingService)
 {
     _errorReportingService = errorReportingService;
     _solutionAssetStorage  = solutionAssetStorage;
     _service = service;
 }