Ejemplo n.º 1
0
        public override bool Equals(object obj)
        {
            RegisterMessage message = obj as RegisterMessage;

            return(Deregister = message.Deregister && Id == message.Id &&
                                Enumerable.SequenceEqual(SolvableProblems, message.SolvableProblems) && Type == message.Type);
        }
        public void Parse_RegisterMessage_XMLString()
        {
            string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"xml_samples\Register.xml");

            RegisterType type = RegisterType.TaskManager;
            byte threads = 3;
            string[] problems = {"TSP","GraphColoring"};

            RegisterMessage register = new RegisterMessage(type, threads, problems);
            register.Deregister = true;
            register.Id = 5;
            string actualXmlStr = register.ToXmlString();

            XmlDocument xmlDoc = new XmlDocument();
            
            xmlDoc.Load(path);
            string expectedXmlStr = xmlDoc.OuterXml;

            Assert.AreEqual(expectedXmlStr, actualXmlStr);
        }
        public void Parse_XMLString_RegisterMessage()
        {
            /*********** Actual message ***********/
            string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"xml_samples\Register.xml");

            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load(path);
            string xmlStr = xmlDoc.OuterXml;

            string name = Message.GetMessageName(xmlStr);
            RegisterMessage actualMessage = null;

            if (name == RegisterMessage.ELEMENT_NAME)
                actualMessage = RegisterMessage.Construct(xmlStr);

            /*********** Expected message ***********/
            RegisterType type = RegisterType.TaskManager;
            byte threads = 3;
            string[] problems = { "TSP", "GraphColoring" };

            RegisterMessage expectedMessage = new RegisterMessage(type, threads, problems);
            expectedMessage.Deregister = true;
            expectedMessage.Id = 5;

            Assert.AreEqual(expectedMessage, actualMessage);
        }
        private bool registerExistingNode(RegisterMessage message, Socket socket)
        {
            NetworkNode node = new NetworkNode(message.Type, message.Id, (uint)systemTracker.Timeout, message.ParallelThreads, message.SolvableProblems,
                                        clientTracker.BackupServers);

            IPAddress address = (socket.RemoteEndPoint as IPEndPoint).Address;
            int port = (ushort)Server.PRIMARY_PORT;
            // TODO hack
            if (clientTracker.BackupServers.Length == 1)
                port = (ushort)Server.PRIMARY_PORT2;

            node.Address = address;
            node.Port = (ushort)port;

            // Dont inform backup about it self
            // It comes naturally in NoOperation message
            if (node.Type == RegisterType.CommunicationServer && 
                (server.Address.ToString().Equals(address.ToString()) && server.Port == port))
                return false;

            SmartConsole.PrintLine("Backup adding existing node", SmartConsole.DebugLevel.Advanced);
            clientTracker.AddNode(node);
            return true;
        }
        /// <summary>
        ///     Register new node - Primary server job
        /// </summary>
        private void registerNewNode(RegisterMessage message, Socket socket) 
        {
            // Place holder, have to fetch info from the System.
            ulong id = systemTracker.GetNextClientID();
            uint timeout = (uint)systemTracker.Timeout;

            SmartConsole.PrintLine("Adding new Node", SmartConsole.DebugLevel.Advanced);

            NetworkNode node = new NetworkNode(message.Type, id, timeout, message.ParallelThreads, message.SolvableProblems,
                                                  clientTracker.BackupServers);
            node.LastSeen = DateTime.Now;

            // Backup Server
            if (node.Type == RegisterType.CommunicationServer)
            {
                // update Node
                IPAddress address = (socket.RemoteEndPoint as IPEndPoint).Address;
                int port = (ushort)Server.PRIMARY_PORT;
                node.Address = address;

                // TODO hack
                if(clientTracker.BackupServers.Length == 1)
                    port = (ushort)Server.PRIMARY_PORT2;

                node.Port = (ushort)port;
            }

            // Add the node to system
            clientTracker.AddNode(node);

            RegisterResponseMessage response = new RegisterResponseMessage(id, timeout, clientTracker.BackupServers);

            server.Send(socket, response);

            RegisterMessage backUpmessage = new RegisterMessage(message.Type, message.ParallelThreads, message.SolvableProblems);
            backUpmessage.Id = id;

            InformBackup(backUpmessage);
        }
 /******************************************************************/
 /**************************** REGISTER ****************************/
 /******************************************************************/
 
 /// <summary>
 ///     Removes a node from the server
 /// </summary>
 /// <param name="message"></param>
 /// <param name="socket"></param>
 private void deregisterNode(RegisterMessage message, Socket socket)
 {
     SmartConsole.PrintLine("Deregister received, removing client...", SmartConsole.DebugLevel.Advanced);
     socket.Disconnect(false);
     clientTracker.RemoveNode(message.Id, message.Type);
 }
Ejemplo n.º 7
0
        public static RegisterMessage CreateRegisterMessage()
        {
            RegisterType type = RegisterType.TaskManager;
            byte threads = 3;
            string[] problems = { "TSP", "GraphColoring" };

            RegisterMessage expectedMessage = new RegisterMessage(type, threads, problems);
            expectedMessage.Deregister = true;
            expectedMessage.Id = 5;
            return expectedMessage;
        }