Exemple #1
0
        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);
        }
Exemple #2
0
        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);
            }
        }