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(); } }
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(); } }
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(); } }
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); }
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(); } }
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); }