private DHCP_Server() { ip_addr = "192.168.1.1"; default_gateway = "192.168.1.254"; ip_range = 252; _devices = new DeviceList(); // adiciona manualmente alguns dispositivos ao servidor for (int i = 0; i < 11; i++, ip_range--) { if (i % 2 == 1) { // usando adapter aqui _devices[i] = new iPhoneAdapter($"Device {i+1}", $"192.168.1.{254-ip_range}", default_gateway); } else { _devices[i] = new AndroidAdapter($"Device {i+1}", $"192.168.1.{254-ip_range}", default_gateway); } // a linha abaixo demostra a inicialização única da instância // Console.WriteLine($"Device {i+1}, ip address: 192.168.1.{254-ip_range}, {default_gateway}"); } _devices_iterator = _devices.CreateIterator(); }
static void Main(string[] args) { // inicializar variaveis com a instância do servidor dhcp var s1 = DHCP_Server.Instance(); var s2 = DHCP_Server.Instance(); var s3 = DHCP_Server.Instance(); var s4 = DHCP_Server.Instance(); // verifica se as variáveis utilizam a mesma instância if (s1 == s2 && s2 == s3 && s3 == s4) { Console.WriteLine("Mesma instância."); } // o bloco abaixo coloca as variáveis de servidor numa lista para iterar sobre e listar os dispositivos, mostrando que são a mesma insância // tanto na inicialização como na execução // // var servers = new List<DHCP_Server>(){s1, s2, s3, s4}; // foreach (var server in servers) // { // Console.WriteLine(String.Join("\n ", server.GetDevices().Select(x => x.GetAttributes()))); // } // usando iterator aqui myIterator it = s1._devices_iterator; List <DeviceCareTaker> dct_list = new List <DeviceCareTaker>(); int cont = 0; for (Device dev = it.First(); !it.IsOver; dev = it.Next()) { dct_list.Add(new DeviceCareTaker()); dct_list[cont++]._memento = dev.SaveState(); dev.default_gateway = "No gateway"; Console.WriteLine(dev.GetAttributes()); } cont = 0; for (Device dev = it.First(); !it.IsOver; dev = it.Next()) { dev.RestoreState(dct_list[cont++]._memento); Console.WriteLine(dev.GetAttributes()); } }