public List <ServerWithInfo <FaultTolerenceServer> > RegisterNewSlave(ServerInternalInfo serverInternalInfo) { ServerPuppet.Instance.Wait(); lock (Servers) { var newSlave = (FaultTolerenceServer)Activator.GetObject(typeof(FaultTolerenceServer), serverInternalInfo.Url + "/FTServer"); Servers.Add(new ServerWithInfo <FaultTolerenceServer>(newSlave, serverInternalInfo.Url, serverInternalInfo.IsMaster)); new Thread(() => { lock (Servers) { Servers.AsParallel().ForAll(slave => { try { if (!slave.IsMaster && !slave.URL.Equals(serverInternalInfo.Url)) { ServerPuppet.Instance.DoDelay(slave.URL); slave.Server.AddSlave(serverInternalInfo); } } catch (SocketException) { slave.IsDead = true; } } ); } }).Start(); return(Servers); } }
public void AddSlave(ServerInternalInfo serverInternalInfo) { ServerPuppet.Instance.Wait(); lock (Servers) { var newSlave = (FaultTolerenceServer)Activator.GetObject(typeof(FaultTolerenceServer), serverInternalInfo.Url + "/FTServer"); Servers.Add(new ServerWithInfo <FaultTolerenceServer>(newSlave, serverInternalInfo.Url, serverInternalInfo.IsMaster)); } }