private async Task <MessageClient> Reconnect(ServerAgentDefinition agent, TimeSpan timeout) { var client = new MessageClient(PhotonServer.Instance.MessageRegistry) { //Context = sessionBase, }; //MessageClient.ThreadException += MessageClient_OnThreadException; var tokenSource = new CancellationTokenSource(timeout); while (!tokenSource.IsCancellationRequested) { try { await client.ConnectAsync(agent.TcpHost, agent.TcpPort, tokenSource.Token); } catch (SocketException) { await Task.Delay(1000, tokenSource.Token); continue; } var versionRequest = new AgentGetVersionRequest(); var versionResponse = await client.Send(versionRequest) .GetResponseAsync <AgentGetVersionResponse>(tokenSource.Token); if (versionResponse.Version == UpdateVersion) { return(client); } } client.Dispose(); return(null); }
private async Task UpdateAgent(ServerAgentDefinition agent, MessageClient messageClient) { var updater = new AgentUpdater(); //updater.UpdateVersion = ; //updater.UpdateMsiFilename = ; //updater.Output = Context. throw new NotImplementedException(); }
public AgentDeploySessionHandle(IServerDeployContext context, ServerAgentDefinition agentDefinition, MessageProcessorRegistry registry) { this.context = context; this.definition = agentDefinition; Tasks = new TaskRunnerManager(); messageClient = new MessageClient(registry) { Context = context, }; messageClient.ThreadException += MessageClient_OnThreadException; }
private async Task AgentAction(ServerAgentDefinition agent) { using (var messageClient = new MessageClient(PhotonServer.Instance.MessageRegistry)) { await messageClient.ConnectAsync(agent.TcpHost, agent.TcpPort, CancellationToken.None); var agentVersionRequest = new AgentGetVersionRequest(); var agentVersionResponse = await messageClient.Send(agentVersionRequest) .GetResponseAsync <AgentGetVersionResponse>(); if (!HasUpdates(agentVersionResponse.Version, LatestAgentVersion)) { // TODO: Print Up-To-Date message return; } await UpdateAgent(agent, messageClient); } }
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); }