Esempio n. 1
0
 public void RemoveNode(AuthoryNode node)
 {
     foreach (var server in node.MapServers)
     {
         server.AuthoryMap.OnlineChannels.Remove(server);
     }
     Nodes.Remove(node);
 }
Esempio n. 2
0
 public void CheckNodeConnections()
 {
     for (int i = DataHandler.Nodes.Count - 1; i >= 0; i--)
     {
         if (DataHandler.Nodes[i].NodeMasterConnection.Status == NetConnectionStatus.Disconnected)
         {
             AuthoryNode node = DataHandler.Nodes[i];
             Console.WriteLine($"Removing node: {node}");
             DataHandler.RemoveNode(node);
         }
     }
 }
Esempio n. 3
0
        public AuthoryMapServer(AuthoryNode masterNode, int mapPort, AuthoryMap map)
        {
            OnlineCharacters = new List <Character>();

            this.MasterNode = masterNode;

            this.IP   = masterNode.NodeMasterIP;
            this.Port = mapPort;


            this.AuthoryMap = map;
        }
Esempio n. 4
0
        /// <summary>
        /// Nodes will report their map servers load every X seconds.
        /// </summary>
        /// <param name="msgIn"></param>
        public void LoadReport(NetIncomingMessage msgIn)
        {
            AuthoryNode node = DataHandler.GetNode(msgIn.SenderConnection);

            int count = msgIn.ReadInt32();

            for (int i = 0; i < count; i++)
            {
                AuthoryMapServer channel = node.GetMapServerByPort(msgIn.ReadInt32());

                int channelLoad = msgIn.ReadInt32();

                channel.Load = channelLoad;
            }
        }
Esempio n. 5
0
        /// <summary>
        /// When a new Node server connects.
        /// </summary>
        /// <param name="msgIn"></param>
        /// <param name="hailMessage"></param>
        public void NewServerNodeConnection(NetIncomingMessage msgIn, NetIncomingMessage hailMessage)
        {
            Console.WriteLine("New node connection...");
            string ip   = hailMessage.ReadString();
            int    port = msgIn.SenderConnection.RemoteEndPoint.Port;

            int latestPort = DataHandler.FindLatestPort();

            Console.WriteLine($"Latest port: {latestPort}");
            latestPort++;

            Console.WriteLine($"Latest port: {latestPort}");

            Console.WriteLine($"Connection: {ip}:{port}");
            AuthoryNode newNode = new AuthoryNode(msgIn.SenderConnection, ip, port);

            Console.WriteLine($"New node created:");
            Console.WriteLine(newNode);

            if (DataHandler.Nodes.Count == 0)
            {
                OutgoingMessageHandler.Instance.SendMapsRequest(newNode.NodeMasterConnection, DataHandler.Maps.Values.ToArray(), latestPort);
                Console.WriteLine($"Current node count {DataHandler.Nodes.Count} requesting all maps from new node");

                Console.WriteLine(newNode);
                DataHandler.ListNodes();
            }
            else
            {
                AuthoryNode      overloadedNode = DataHandler.GetOverloadedNode();
                AuthoryMapServer overloadedMap  = overloadedNode.GetOverloadedMap();
                if (overloadedMap == null)
                {
                    DataHandler.ListNodes();

                    throw new Exception("There aren't any nodes at the moment!");
                }
                else
                {
                    OutgoingMessageHandler.Instance.SendMapsRequest(newNode.NodeMasterConnection, overloadedMap.AuthoryMap, latestPort);
                    Console.WriteLine("Map request sent...");
                }
            }

            DataHandler.AddNode(newNode);
            Console.WriteLine($"New node added to Online Nodes.");
            Console.WriteLine();
        }
Esempio n. 6
0
        /// <summary>
        /// When a map server closes on a node.
        /// </summary>
        /// <param name="msgIn"></param>
        public void MapsRemoved(NetIncomingMessage msgIn)
        {
            AuthoryNode node = DataHandler.GetNode(msgIn.SenderConnection);


            int msgInfoCount = msgIn.ReadInt32();

            for (int i = 0; i < msgInfoCount; i++)
            {
                int mapPort = msgIn.ReadInt32();

                int    mapIndex = msgIn.ReadInt32();
                string mapName  = msgIn.ReadString();

                node.RemoveMapServer(mapPort, mapIndex, mapName);
            }
        }
Esempio n. 7
0
        public AuthoryNode GetOverloadedNode()
        {
            AuthoryNode returnNode = null;

            foreach (var node in Nodes)
            {
                if (returnNode == null)
                {
                    returnNode = node;
                }
                else
                {
                    if (returnNode.GetOverallLoad() < node.GetOverallLoad())
                    {
                        returnNode = node;
                    }
                }
            }

            return(returnNode);
        }
Esempio n. 8
0
        /// <summary>
        /// If the map server approved the connection of the sent character. The server will send the map server information to the connected client.
        /// </summary>
        /// <param name="msgIn"></param>
        public void ConnectionApproved(NetIncomingMessage msgIn)
        {
            int    port              = msgIn.ReadInt32();
            int    accountId         = msgIn.ReadInt32();
            int    characterId       = msgIn.ReadInt32();
            long   uid               = msgIn.ReadInt64();
            ushort characterServerId = msgIn.ReadUInt16();

            Console.WriteLine("Connection Approved at uid: " + uid);

            Account account = DataHandler.GetAccount(accountId);

            account.SetConnectedCharacter(characterId);

            account.ConnectionApproved = true;

            AuthoryNode node = DataHandler.GetNode(msgIn.SenderConnection);

            if (node == null)
            {
                Console.WriteLine($"Node not found with Connection({msgIn.SenderConnection})");
                return;
            }
            AuthoryMapServer server = node.GetMapServerByPort(port);

            if (server == null)
            {
                Console.WriteLine($"Server not found with Port({port})");
                return;
            }

            account.ConnectedServerMap = server;

            if (server.GetCharacter(characterId) == null)
            {
                server.OnlineCharacters.Add(account.ConnectedCharacter);
            }

            OutgoingMessageHandler.Instance.SendConnectionApproved(account, server);
        }
Esempio n. 9
0
        /// <summary>
        /// When a node creates a map server.
        /// </summary>
        /// <param name="msgIn"></param>
        public void MapCreated(NetIncomingMessage msgIn)
        {
            AuthoryNode node    = DataHandler.GetNode(msgIn.SenderConnection);
            int         mapPort = msgIn.ReadInt32();

            int    mapIndex = msgIn.ReadInt32();
            string mapName  = msgIn.ReadString();


            Console.WriteLine("Created map port: " + mapPort);
            Console.WriteLine("MAP NAME: " + mapName);
            Console.WriteLine("MAP IDNEX: " + mapIndex);

            AuthoryMapServer map = new AuthoryMapServer(node, mapPort, DataHandler.Maps.Values.Single(x => x.MapIndex == mapIndex));

            node.AddMapServer(map);
            DataHandler.GetMap(mapIndex).OnlineChannels.Add(map);


            Console.WriteLine("Map added:");
            Console.WriteLine(map);
        }
Esempio n. 10
0
 public void AddNode(AuthoryNode newNode)
 {
     Nodes.Add(newNode);
 }