Ejemplo n.º 1
0
        public async Task <AgentConnection> ConnectAsync(
            IWorkbookAppInstallation workbookApp,
            ClientSessionUri clientSessionUri,
            IMessageService messageService,
            Action disconnectedHandler,
            CancellationToken cancellationToken)
        {
            if (disconnectedHandler == null)
            {
                throw new ArgumentNullException(nameof(disconnectedHandler));
            }

            IAgentTicket ticket;

            if (clientSessionUri == null || clientSessionUri.SessionKind == ClientSessionKind.Workbook)
            {
                ticket = await workbookApp.RequestAgentTicketAsync(
                    clientSessionUri,
                    messageService,
                    disconnectedHandler,
                    cancellationToken);
            }
            else
            {
                ticket = new UncachedAgentTicket(
                    clientSessionUri,
                    messageService,
                    disconnectedHandler);
            }

            var assemblySearchPaths = ticket.AssemblySearchPaths;

            var identity = await ticket.GetAgentIdentityAsync(cancellationToken);

            if (identity == null)
            {
                throw new Exception("IAgentTicket.GetAgentIdentityAsync did not return an identity");
            }

            var apiClient = await ticket.GetClientAsync(cancellationToken);

            if (apiClient == null)
            {
                throw new Exception("IAgentTicket.GetClientAsync did not return a client");
            }

            apiClient.SessionCancellationToken = cancellationToken;

            return(new AgentConnection(
                       ticket,
                       identity.AgentType,
                       identity,
                       apiClient,
                       assemblySearchPaths == null
                    ? ImmutableArray <string> .Empty
                    : assemblySearchPaths.ToImmutableArray(),
                       await apiClient.GetAgentFeaturesAsync(cancellationToken)));
        }
Ejemplo n.º 2
0
        public async Task <AgentConnection> ConnectAsync(
            IWorkbookAppInstallation workbookApp,
            ClientSessionUri clientSessionUri,
            IMessageService messageService,
            Action disconnectedHandler,
            CancellationToken cancellationToken)
        {
            if (disconnectedHandler == null)
            {
                throw new ArgumentNullException(nameof(disconnectedHandler));
            }

            IAgentTicket ticket;

            if (clientSessionUri == null ||
                clientSessionUri.Host == null ||
                !ValidPortRange.IsValid(clientSessionUri.Port))
            {
                ticket = await workbookApp.RequestAgentTicketAsync(
                    clientSessionUri,
                    messageService,
                    disconnectedHandler,
                    cancellationToken);
            }
            else
            {
                ticket = new UncachedAgentTicket(
                    clientSessionUri,
                    messageService,
                    disconnectedHandler);
            }

            var identity = await ticket.GetAgentIdentityAsync(cancellationToken);

            if (identity == null)
            {
                throw new Exception("IAgentTicket.GetAgentIdentityAsync did not return an identity");
            }

            var apiClient = await ticket.GetClientAsync(cancellationToken);

            if (apiClient == null)
            {
                throw new Exception("IAgentTicket.GetClientAsync did not return a client");
            }

            apiClient.UpdateSessionCancellationToken(cancellationToken);

            return(new AgentConnection(
                       ticket,
                       identity.AgentType,
                       identity,
                       apiClient,
                       await apiClient.GetAgentFeaturesAsync(cancellationToken)));
        }
Ejemplo n.º 3
0
        AgentConnection(
            IAgentTicket ticket,
            AgentType type,
            AgentIdentity identity,
            IAgentClient apiClient,
            AgentFeatures features)
        {
            this.ticket = ticket;

            Type     = type;
            Identity = identity;
            Api      = apiClient;
            Features = features;
        }
Ejemplo n.º 4
0
        AgentConnection(
            IAgentTicket ticket,
            AgentType type,
            AgentIdentity identity,
            AgentClient apiClient,
            ImmutableArray <string> assemblySearchPaths,
            AgentFeatures features)
        {
            this.ticket = ticket;

            Type                = type;
            Identity            = identity;
            Api                 = apiClient;
            AssemblySearchPaths = assemblySearchPaths;
            Features            = features;
        }