public static void RegisterClusterRequest(IncomingInterserverPacket packet) { RegisterClusterRequest request = new RegisterClusterRequest(packet); SharpFly_Utility_Library.Database.LoginDatabase.Tables.Cluster clusterTable = SharpFly_Utility_Library.Database.LoginDatabase.Queries.Cluster.Instance.GetCluster(request.ClusterId); Cluster cluster = new Cluster(); cluster.ClientSocket = new PushSocket(String.Format(">tcp://{0}:{1}", request.Ip, request.SendPort)); cluster.ClusterData = new SharpFly_Packet_Library.Helper.Cluster(); cluster.ClusterData.Id = request.ClusterId; cluster.ClusterData.Name = clusterTable.Name; cluster.ClusterData.Ip = request.Ip; if (clusterTable == null) { cluster.SendRegisterClusterSuccesful(0, false); Console.WriteLine("Couldn't register cluster {0}: The cluster id {1} wasn't found in the database", cluster.ClusterData.Name, cluster.ClusterData.Id); return; } if (request.AuthorizationPassword != clusterTable.Password) { cluster.SendRegisterClusterSuccesful(0, false); Console.WriteLine("Couldn't register cluster {0}: Cluster authorization password was wrong", cluster.ClusterData.Name); return; } LoginServer.ClusterManager.AddCluster(cluster); cluster.SendRegisterClusterSuccesful(cluster.ClusterData.Id, true); Console.WriteLine("Cluster identified as {0}!", cluster.ClusterData.Name); }
public ClusterServer() { Console.WriteLine("Test if port 28000 is in use..."); if (PortChecker.IsPortAvailable(28000)) { Console.WriteLine("Port 28000 is already in use - You can only run one login server on one computer"); return; } Rijndael.Initiate(); Config = new ClusterServerConfig("Resources/Config/Cluster.ini"); int loginPort = (int)Config.GetSetting("LoginPort"); Console.WriteLine("Test if port {0} is in use...", loginPort.ToString()); if (PortChecker.IsPortAvailable(loginPort)) { Console.WriteLine("Port {0} is already in use - You can only run one login server on one computer", loginPort); return; } int receivePort = (int)Config.GetSetting("InterserverPort"); Console.WriteLine("Search open port for interserver connection..."); while (PortChecker.IsPortAvailable(receivePort)) { Console.WriteLine("Port {0} not available", receivePort.ToString()); receivePort += 1; } LoginDatabase = new LoginDatabase(Config); ClusterDatabase = new ClusterDatabase(Config); if (ClusterDatabase.Connection.CheckConnection() && LoginDatabase.Connection.CheckConnection()) { Console.WriteLine("Connecting to login server..."); LoginConnector = new LoginConnector(loginPort.ToString(), receivePort.ToString()); LoginConnector.StartListening(); // Let's wait a bit to let the subscriber and publisher socket to connect Thread.Sleep(500); RegisterClusterRequest request = new RegisterClusterRequest((uint)Config.GetSetting("ClusterId"), (string)Config.GetSetting("ClusterAuthorizationPassword"), (string)Config.GetSetting("ClusterAddress"), receivePort.ToString(), LoginConnector.PublisherSocket); LoginConnector.OnClusterRequestSuccesful += new LoginConnector.RequestSuccesfulHandler(OnRegisterClusterRequestSuccesful); } }