예제 #1
0
 public RegisterClusterRequest(IncomingInterserverPacket packet)
 {
     ClusterId             = packet.ReadUInt();
     AuthorizationPassword = packet.ReadString();
     Ip       = packet.ReadString();
     SendPort = packet.ReadString();
 }
예제 #2
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);
        }
예제 #3
0
        public static void RegisterNewChannel(IncomingInterserverPacket packet)
        {
            RegisterNewChannelRequest request = new RegisterNewChannelRequest(packet);

            SharpFly_Utility_Library.Database.LoginDatabase.Tables.Cluster clusterTable = SharpFly_Utility_Library.Database.LoginDatabase.Queries.Cluster.Instance.GetCluster(request.ClusterId);

            uint    clusterId = request.ClusterId;
            Cluster cluster   = LoginServer.ClusterManager.GetClusterById(clusterId);

            if (clusterTable == null || request.AuthorizationPassword != clusterTable.Password)
            {
                cluster.SendRegisterNewChannelSuccesful(0, request.TempChannelId, false);
                Console.WriteLine("Couldn't register new channel to cluster {1}", cluster.ClusterData.Name);
                return;
            }

            if (cluster != null)
            {
                Channel channel = new Channel();
                channel.Parent         = cluster.ClusterData;
                channel.Id             = ChannelId++;
                channel.Name           = request.Name;
                channel.PlayerCount    = 0;
                channel.MaxPlayerCount = request.MaxPlayerCount;
                cluster.ClusterData.Channels.Add(channel);

                cluster.SendRegisterNewChannelSuccesful(channel.Id, request.TempChannelId, true);
                Console.WriteLine("Registered channel {0} on cluster {1}", channel.Name, cluster.ClusterData.Name);
                return;
            }
            Console.WriteLine("Couldn't register new channel to cluster {1}", cluster.ClusterData.Name);
        }
예제 #4
0
        private void RegisterNewChannelSuccesful(IncomingInterserverPacket packet)
        {
            RegisterNewChannelSuccesful request = new RegisterNewChannelSuccesful(packet);
            RequestSuccesfulEventArgs   args    = new RequestSuccesfulEventArgs(request.Succesful, request.ChannelId);

            OnNewChannelRequestSuccesful(args);
        }
예제 #5
0
        public static void RegisterChannelRequest(IncomingInterserverPacket packet)
        {
            RegisterChannelRequest request = new RegisterChannelRequest(packet);

            if (request.AuthorizationPassword != (string)ClusterServer.Config.GetSetting("ClusterAuthorizationPassword"))
            {
                Console.WriteLine("Couldn't register channel on this cluster");
                return;
            }

            Channel channel = new Channel();

            channel.ClientSocket               = new PushSocket(String.Format(">tcp://{0}:{1}", request.Ip, request.SendPort));
            channel.ChannelData                = new SharpFly_Packet_Library.Helper.Channel();
            channel.ChannelData.Id             = (uint)new Random().Next(10000, int.MaxValue);
            channel.ChannelData.Name           = request.Name;
            channel.ChannelData.PlayerCount    = 0;
            channel.ChannelData.MaxPlayerCount = request.MaxPlayerCount;

            ClusterServer.ChannelManager.AddChannel(channel);

            SharpFly_Packet_Library.Packets.Interserver.Outgoing.RegisterNewChannelRequest newChannelRequest = new SharpFly_Packet_Library.Packets.Interserver.Outgoing.RegisterNewChannelRequest(ClusterServer.ClusterId, channel.ChannelData.Id, request.AuthorizationPassword, request.Name, request.MaxPlayerCount, ClusterServer.LoginConnector.PublisherSocket);

            Console.WriteLine("Channel identified as {0}!", channel.ChannelData.Name);
        }
예제 #6
0
        private void RegisterClusterRequestSuccesful(IncomingInterserverPacket packet)
        {
            RegisterClusterSuccesful  request = new RegisterClusterSuccesful(packet);
            RequestSuccesfulEventArgs args    = new RequestSuccesfulEventArgs(request.Succesful, request.ClusterId);

            OnClusterRequestSuccesful(args);
        }
예제 #7
0
 public RegisterChannelRequest(IncomingInterserverPacket packet)
 {
     AuthorizationPassword = packet.ReadString();
     Ip             = packet.ReadString();
     SendPort       = packet.ReadString();
     Name           = packet.ReadString();
     MaxPlayerCount = packet.ReadUInt();
 }
예제 #8
0
 public RegisterNewChannelRequest(IncomingInterserverPacket packet)
 {
     AuthorizationPassword = packet.ReadString();
     ClusterId             = packet.ReadUInt();
     TempChannelId         = packet.ReadUInt();
     Name           = packet.ReadString();
     MaxPlayerCount = packet.ReadUInt();
 }
예제 #9
0
        private void ProcessData(IncomingInterserverPacket packet)
        {
            packet.Position = 0;
            uint header = packet.ReadUInt();

            switch (header)
            {
            case OpCodes.REGISTER_CHANNEL_REQUEST_SUCCESFUL:
                RegisterChannelRequestSuccesful(packet);
                break;

            default:
                Console.WriteLine(String.Format("Unknown packet header {0}", header));
                break;
            }
        }
예제 #10
0
        public void StartListening()
        {
            var poller = new NetMQPoller {
                ServerSocket
            };

            ServerSocket.ReceiveReady += (s, a) =>
            {
                byte[] msg;
                // Receive all messages in the poller
                while (a.Socket.TryReceiveFrameBytes(out msg))
                {
                    IncomingInterserverPacket packet = new IncomingInterserverPacket(msg);
                    ProcessData(packet);
                }
            };

            poller.RunAsync();
        }
예제 #11
0
        public static void ProcessData(IncomingInterserverPacket packet)
        {
            packet.Position = 0;
            uint header = packet.ReadUInt();

            switch (header)
            {
            case OpCodes.REGISTER_CLUSTER_REQUEST:
                RegisterClusterRequest(packet);
                break;

            case OpCodes.REGISTER_NEW_CHANNEL:
                RegisterNewChannel(packet);
                break;

            default:
                Console.WriteLine(String.Format("Unknown packet header {0}", header));
                break;
            }
        }
예제 #12
0
        public void StartListening()
        {
            var poller = new NetMQPoller {
                _SubscriberSocket
            };

            _SubscriberSocket.ReceiveReady += (s, a) =>
            {
                byte[] msg;
                // Receive all messages in the poller
                while (a.Socket.TryReceiveFrameBytes(out msg))
                {
                    // Ignore the publisher-subscriber message before the real packet
                    if (StructuralComparisons.StructuralEqualityComparer.Equals(msg, System.Text.Encoding.UTF8.GetBytes("SharpFlyCluster")))
                    {
                        return;
                    }
                    IncomingInterserverPacket packet = new IncomingInterserverPacket(msg);
                    Channel.Channel.ProcessData(packet);
                }
            };

            poller.RunAsync();
        }
예제 #13
0
 public RegisterNewChannelSuccesful(IncomingInterserverPacket packet)
 {
     ChannelId = packet.ReadUInt();
     Succesful = packet.ReadBool();
 }
예제 #14
0
 public RegisterChannelRequestSuccesful(IncomingInterserverPacket packet)
 {
     Accepted  = packet.ReadBool();
     ChannelId = packet.ReadUInt();
 }
 public RegisterClusterSuccesful(IncomingInterserverPacket packet)
 {
     ClusterId = packet.ReadUInt();
     Succesful = packet.ReadBool();
 }