private bool SearchForRootServer() { int i = 0; while (i < AllServers.Count) { try { Console.WriteLine("Trying to connect to: " + AllServers[i]); ss = (IServerServices)Activator.GetObject(typeof(IServerServices), AllServers[i] + "MyRemoteObjectName"); if (ss.isRoot() == true) { Console.WriteLine("Connected to :" + AllServers[i]); RootServer = AllServers[i]; Console.WriteLine(RootServer + " is the ROOT Server"); RemotingServices.Marshal(cs, "MyRemoteObjectName", typeof(ClientServices)); //new Thread(() => PingLoop()).Start(); //STATE_CLIENT = STATE_CLIENT_COMMAND_INTERPRETATION; break; } else { Console.WriteLine("Connected to :" + AllServers[i]); Console.WriteLine(AllServers[i] + "is NOT the ROOT Server"); } } catch (System.Net.Sockets.SocketException e) { Console.WriteLine("The server: " + AllServers[i] + " is not available"); } i = (i + 1) % AllServers.Count; if (i == 0) { return(false); } } return(true); }