コード例 #1
0
        public async Task ReleaseAsync()
        {
            // TODO: Locking on sessionId and isActive

            BuildTasks.Stop();

            if (messageClient.IsConnected)
            {
                if (!string.IsNullOrEmpty(AgentSessionId))
                {
                    var message = new BuildSessionReleaseRequest {
                        SessionId = AgentSessionId,
                    };

                    try {
                        await messageClient.Send(message)
                        .GetResponseAsync();
                    }
                    catch (Exception error) {
                        Log.Error($"Failed to release Agent Session '{AgentSessionId}'! {error.Message}");
                    }
                }

                await messageClient.DisconnectAsync();
            }
        }
コード例 #2
0
        private async Task UpdateAgent(ServerAgent agent, MessageClient messageClient, CancellationToken token)
        {
            var message = new AgentUpdateRequest {
                Filename = UpdateFilename,
            };

            try {
                await messageClient.Send(message)
                .GetResponseAsync(token);

                await messageClient.DisconnectAsync();
            }
            finally {
                messageClient?.Dispose();
            }

            await Task.Delay(3000, token);

            // TODO: Verify update was successful by polling for server and checking version
            messageClient = null;

            try {
                messageClient = await Reconnect(agent, TimeSpan.FromMinutes(2));
            }
            finally {
                messageClient?.Dispose();
            }
        }
コード例 #3
0
        public async Task ReleaseAsync()
        {
            // TODO: Locking on sessionId and isActive

            if (messageClient.IsConnected)
            {
                var message = new DeploySessionReleaseRequest {
                    SessionId = AgentSessionId,
                };

                try {
                    await messageClient.Send(message)
                    .GetResponseAsync();
                }
                catch (Exception error) {
                    throw new ApplicationException($"Failed to release agent session! {error.Message}");
                }

                await messageClient.DisconnectAsync();
            }
        }
コード例 #4
0
        private void SessionClient_OnSessionRelease(RemoteTaskCompletionSource taskHandle)
        {
            Task.Run(async() => {
                Tasks.Stop();

                if (MessageClient.IsConnected)
                {
                    if (!string.IsNullOrEmpty(AgentSessionId))
                    {
                        try {
                            await OnReleaseSessionAsync();
                        }
                        catch (Exception error) {
                            Log.Error($"Failed to release Agent Session '{AgentSessionId}'! {error.Message}");
                        }
                    }

                    await MessageClient.DisconnectAsync();
                }
            }, Token)
            .ContinueWith(taskHandle.FromTask, Token);
        }
コード例 #5
0
ファイル: DisconnectTests.cs プロジェクト: brhoten/Photon
        public async Task ClientDisconnectWaitsForMessages()
        {
            var registry = new MessageProcessorRegistry();

            registry.Register(typeof(DelayedTestProcessor));

            using (var listener = new MessageListener(registry))
                using (var client = new MessageClient(registry)) {
                    listener.Listen(IPAddress.Loopback, Port);
                    await client.ConnectAsync(Host, Port, CancellationToken.None);

                    DelayedTestProcessor.Complete = false;
                    var message = new DelayedTestRequest();
                    var task    = client.Send(message).GetResponseAsync <DelayedTestResponse>();

                    await client.DisconnectAsync();

                    //await task;

                    Assert.That(DelayedTestProcessor.Complete, Is.True);

                    await listener.StopAsync();
                }
        }
コード例 #6
0
        public async Task Update(ServerAgentDefinition agent, CancellationToken token)
        {
            //Output
            //    .Append("Checking Agent ", ConsoleColor.DarkCyan)
            //    .Append(agent.Name, ConsoleColor.Cyan)
            //    .AppendLine(" for updates...", ConsoleColor.DarkCyan);

            //MessageClient client = null;

            try {
                //client = new MessageClient(PhotonServer.Instance.MessageRegistry) {
                //    //Context = sessionBase,
                //};

                //MessageClient.ThreadException += MessageClient_OnThreadException;

                //await client.ConnectAsync(agent.TcpHost, agent.TcpPort, token);

                //var versionRequest = new AgentGetVersionRequest();

                //var versionResponse = await client.Send(versionRequest)
                //    .GetResponseAsync<AgentGetVersionResponse>(token);

                //if (!HasUpdates(versionResponse.Version, UpdateVersion)) {
                //    Output
                //        .Append("Agent ", ConsoleColor.DarkBlue)
                //        .Append(agent.Name, ConsoleColor.Blue)
                //        .AppendLine(" is up-to-date. Version: ", ConsoleColor.DarkBlue)
                //        .AppendLine(versionResponse.Version, ConsoleColor.Blue);

                //    return;
                //}

                //Output
                //    .Append("Updating Agent ", ConsoleColor.DarkCyan)
                //    .Append(agent.Name, ConsoleColor.Cyan)
                //    .AppendLine("...", ConsoleColor.DarkCyan);

                var message = new AgentUpdateRequest {
                    Filename = MsiFilename,
                };

                await MessageClient.Send(message)
                .GetResponseAsync(token);

                await MessageClient.DisconnectAsync();
            }
            finally {
                MessageClient?.Dispose();
            }

            await Task.Delay(3000, token);

            // TODO: Verify update was successful by polling for server and checking version
            client = null;

            try {
                client = await Reconnect(agent, TimeSpan.FromSeconds(60));

                await client.DisconnectAsync();
            }
            finally {
                client?.Dispose();
            }

            Output
            .Append("Agent ", ConsoleColor.DarkGreen)
            .Append(agent.Name, ConsoleColor.Green)
            .AppendLine(" updated successfully.", ConsoleColor.DarkGreen);
        }