private static void Main(string[] args) { var channelServ = new TcpChannel(); ChannelServices.RegisterChannel(channelServ, false); var mainServer = (IMainServer) Activator.GetObject(typeof (IMainServer), Config.RemoteMainserverUrl); ServerInit serverInit = mainServer.AddServer(); channelServ.StopListening(null); ChannelServices.UnregisterChannel(channelServ); var server = new Server(serverInit); IDictionary properties = new Hashtable(); int serverPort = Config.GetServerPort(serverInit.Uuid); const int serverTimeout = Config.InvocationTimeout; properties["port"] = serverPort; properties["timeout"] = serverTimeout; channelServ = new TcpChannel(properties, null, null); ChannelServices.RegisterChannel(channelServ, false); RemotingServices.Marshal(server, Config.RemoteServerObjName); server.StartSplitLock(); foreach (var faultDetection in serverInit.FaultDetection) { var fd = (IServer) Activator.GetObject(typeof (IServer), Config.GetServerUrl(faultDetection.Key)); fd.OnFaultDetectionReborn(serverInit.Uuid); } int backupId = -1; if ((serverInit.FaultDetection.Count == 1 && serverInit.FaultDetection.ContainsKey(serverInit.Parent) && serverInit.Parent != -1) || (serverInit.FaultDetection.Count == 0 && serverInit.Parent != -1)) { backupId = serverInit.Parent; } else if (serverInit.FaultDetection.Count > 0) { backupId = serverInit.FaultDetection.Keys.Max(); } if (backupId != -1) { /* Get data from backup */ var backupServer = (IServer) Activator.GetObject(typeof (IServer), Config.GetServerUrl(backupId)); backupServer.StartSplitLock(); ParticipantStatus status = backupServer.OnChild(serverInit.Uuid, serverInit.Version, serverInit.ServerCount); server.SetStatus(status); backupServer.EndSplitLock(); } else { Console.WriteLine("Server need to have a backup server! Is it the first one?"); } server.EndSplitLock(); Console.WriteLine("Press <enter> to exit"); Console.ReadLine(); }