private void bt_Status(object sender, EventArgs e) { Console.WriteLine("PuppetMaster: Status Message"); //iterate over every server and client in the mapping foreach (Client c in puppetList.getCliList()) { AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true); GrpcChannel channel = GrpcChannel.ForAddress(c.getURL()); ClientServices.ClientServicesClient client = new ClientServices.ClientServicesClient(channel); client.StatusClientAsync(new AskStatusClient { }); } foreach (Server s in puppetList.getServList()) { AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true); GrpcChannel channel_server = GrpcChannel.ForAddress(s.getURL()); GStoreServices.GStoreServicesClient server_client = new GStoreServices.GStoreServicesClient(channel_server); server_client.StatusServerAsync(new AskStatusServer { }); } }
private void bt_PMScriptRun(object sender, EventArgs e) { string PMScript = ""; Thread t = new Thread((ThreadStart)(() => { OpenFileDialog openFileDialog1 = new OpenFileDialog(); string path = Directory.GetCurrentDirectory(); openFileDialog1.InitialDirectory = Path.GetFullPath(Path.Combine(path, @"..\..\..\")); openFileDialog1.RestoreDirectory = true; openFileDialog1.Title = "Browse Text Files"; openFileDialog1.DefaultExt = "txt"; openFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*"; openFileDialog1.FilterIndex = 2; openFileDialog1.CheckFileExists = true; openFileDialog1.CheckPathExists = true; if (openFileDialog1.ShowDialog() == DialogResult.OK) { PMScript = openFileDialog1.FileName; } })); t.SetApartmentState(ApartmentState.STA); t.Start(); t.Join(); Console.WriteLine(PMScript); if (PMScript != "") { //puppetList.startPM(); // Verificacao da existencia do ficheiro Console.WriteLine("Verificar se o ficheiro existe...."); if (File.Exists(PMScript)) { Console.WriteLine("O ficheiro existe...."); // PRIMEIRA PASSAGEM //- Adiciona a lista geral os servers, partitions e clients, ignorando o resto. using (StreamReader file = new StreamReader(PMScript)) { string ln; while ((ln = file.ReadLine()) != null) { // Parsing das linhas do script... string[] parts = ln.Split(new[] { ' ' }); if (parts[0].Equals("ReplicationFactor") && parts.Count() == 2) { continue; // Ignora } else if (parts[0].Equals("Partition")) { Console.WriteLine("Found a partition to create..."); //join dos ids servidores string servers_id = ""; for (int i = 3; i != parts.Length; i++) { servers_id += parts[i] + " "; } //Console.WriteLine($"Lista final dos servidores da partição: {servers_id}"); puppetList.AddPartition(parts[1], parts[2], servers_id); //Console.WriteLine($"Comprimento da lista das partições (após inserção) : {puppetList.getPartList().Count}"); } else if (parts[0].Equals("Server") && parts.Count() == 5) { Console.WriteLine("Found a server to create..."); puppetList.AddServerInfo(parts[1], parts[2], parts[3], parts[4]); //Console.WriteLine($"Comprimento da lista dos servidores (após inserção) : {puppetList.getServList().Count}"); } } file.Close(); } // Depois da primeira passagem, lança todos os servidores / clientes //partições já estão completas puppetList.LaunchServers(); //puppetList.LaunchClients(); //enviar partições para os clientes e servidores puppetList.sendPartitionToProcesses(); // SEGUNDA PASSAGEM // - Nesta passagem so nos interessa os waits, freezes, unfreezes e status using (StreamReader file = new StreamReader(PMScript)) { string ln; while ((ln = file.ReadLine()) != null) { // Parsing das linhas do script... string[] parts = ln.Split(new[] { ' ' }); if (parts[0].Equals("Status") && parts.Count() == 1) { Console.WriteLine("PuppetMaster: Status Message"); //iterate over every server and client in the mapping List <Client> puppet_clients = puppetList.getCliList(); List <Server> puppet_servers = puppetList.getServList(); foreach (Client c in puppet_clients) { AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true); GrpcChannel channel = GrpcChannel.ForAddress(c.getURL()); ClientServices.ClientServicesClient client = new ClientServices.ClientServicesClient(channel); client.StatusClientAsync(new AskStatusClient { }); } foreach (Server s in puppet_servers) { AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true); GrpcChannel channel_server = GrpcChannel.ForAddress(s.getURL()); GStoreServices.GStoreServicesClient server_client = new GStoreServices.GStoreServicesClient(channel_server); server_client.StatusServerAsync(new AskStatusServer { }); } } else if (parts[0].Equals("Wait") && parts.Count() == 2) { Console.WriteLine("***************************************************************************"); Console.WriteLine($"PuppetMaster vai ficar em sleep durante {parts[1]} milisegundos."); Thread.Sleep(Convert.ToInt32(parts[1])); Console.WriteLine("PuppetMaster vai continuar...."); Console.WriteLine("***************************************************************************"); } else if (parts[0].Equals("Freeze") && parts.Count() == 2) { Console.WriteLine("PuppetMaster: Freeze Message"); //sending freeze request to pretended server List <Server> puppet_servers = puppetList.getServList(); foreach (Server s in puppet_servers) { Console.WriteLine($"Freeze ID do s: {s.getID()}"); Console.WriteLine($"Freeze ID do argumento: {parts[1]}"); if (s.getID() == parts[1]) { Console.WriteLine($"Freezing Server {parts[1]}..."); AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true); GrpcChannel channel_server = GrpcChannel.ForAddress(s.getURL()); GStoreServices.GStoreServicesClient server_client = new GStoreServices.GStoreServicesClient(channel_server); server_client.FreezeServerAsync(new FreezeMessage { }); } } } else if (parts[0].Equals("Unfreeze") && parts.Count() == 2) { Console.WriteLine("PuppetMaster: Unfreeze Message"); //sending unfreeze request to pretended server List <Server> puppet_servers = puppetList.getServList(); foreach (Server s in puppet_servers) { Console.WriteLine($"Unfreeze ID do s: {s.getID()}"); Console.WriteLine($"Unfreeze ID do argumento: {parts[1]}"); if (s.getID() == parts[1]) { Console.WriteLine($"Unfreezing Server {parts[1]}..."); AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true); GrpcChannel channel_server = GrpcChannel.ForAddress(s.getURL()); GStoreServices.GStoreServicesClient server_client = new GStoreServices.GStoreServicesClient(channel_server); server_client.UnfreezeServerAsync(new UnfreezeMessage { }); } } } else if (parts[0].Equals("Crash") && parts.Count() == 2) { Console.WriteLine($"Puppet Master found a crash. Crashing server {parts[1]}"); bool b = false; foreach (Server serv in puppetList.getServList().ToList()) { if (serv.getID().Equals(parts[1])) { b = true; } } if (b) { puppetList.DelServer(parts[1]); } //propagar para todos puppetList.propagateCrash(parts[1]); } else if (parts[0].Equals("Client") && parts.Count() == 4) { Console.WriteLine("Found a cliente to create..."); puppetList.AddClient(parts[1], parts[2], parts[3]); //Console.WriteLine($"Comprimento da lista dos clientes (após inserção) : {puppetList.getCliList().Count}"); } } file.Close(); } } tb_showServ.Text = puppetList.ShowAll(); } }