public override bool Equals(object obj)
        {
            DivideProblemMessage message = obj as DivideProblemMessage;

            return(Id == message.Id && ProblemType == message.ProblemType &&
                   Enumerable.SequenceEqual(Data, message.Data) &&
                   ComputationalNodes == message.ComputationalNodes &&
                   NodeID == message.NodeID);
        }
        /// <summary>
        /// In this function divideProblem message is sent if there is a new task and node is has proper taskSolver.
        /// It returns true in case of completition of sending the message.
        /// </summary>
        /// <param name="numOfTask"></param>
        /// <param name="node"></param>
        /// <param name="messagePackage"></param>
        /// <returns></returns>
        private bool isMessageProblemDividedSent(int numOfTask, NetworkNode node, MessagePackage messagePackage )
        {
            if (taskTracker.Tasks[numOfTask].Status == Cluster.TaskStatus.New && taskTracker.Tasks[numOfTask].Type == node.SolvableProblems[0])
            {
                DivideProblemMessage divideProblemMessage = new DivideProblemMessage(taskTracker.Tasks[numOfTask].Type, (ulong)taskTracker.Tasks[numOfTask].ID, taskTracker.Tasks[numOfTask].BaseData, (ulong)4, (ulong)node.Id);
                taskTracker.Tasks[numOfTask].Status = Cluster.TaskStatus.Dividing;
                server.Send(messagePackage.Socket, divideProblemMessage);

                SmartConsole.PrintLine("Divide problem message has been sent", SmartConsole.DebugLevel.Advanced);

                return true;
            }
            return false;
        }
Пример #3
0
        private void handleDivideProblemMessage(DivideProblemMessage message)
        {

            for (int i = 0; i < systemTracker.Node.ParallelThreads; i++)
            {
                if (systemTracker.Node.TaskThreads[i].StatusThread.State == StatusThreadState.Idle)
                {
                    DVRPSolver dvrpSolver = new DVRPSolver(message.Data);
                    systemTracker.Node.TaskThreads[i].StatusThread.State = StatusThreadState.Busy;
                    systemTracker.Node.TaskThreads[i].CurrentTask = new Cluster.Task((int)message.Id, message.ProblemType, message.Data) {Status = Cluster.TaskStatus.Dividing};
                    systemTracker.Node.TaskThreads[i].TaskSolver = dvrpSolver;
                    systemTracker.Node.TaskThreads[i].Thread = new Thread(new ThreadStart(systemTracker.Node.TaskThreads[i].Start));
                    systemTracker.Node.TaskThreads[i].Thread.Start();
                    break;
                }
            }
            ///WE SHOULD CHECK HERE WHETHER THERE WAS IDLE THREAD AVALIABLE !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

            // start computations
        }
        public void Parse_DivideProblemMessage_XMLString()
        {
            string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"xml_samples\DivideProblem.xml");

            string problemType = "TSP";
            ulong problemId = 12;
            byte[] data = {
                             1,2,4,6,5,4,32,3
                          };
            ulong nodesCount = 16;
            ulong nodeId = 8;
            DivideProblemMessage message = new DivideProblemMessage(
                    problemType, problemId, data, nodesCount, nodeId );
     
 
            string actualXmlStr = message.ToXmlString();

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

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

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

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

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

            /*********** Expected message ***********/
            string problemType = "TSP";
            ulong problemId = 12;
            byte[] data = {
                             1,2,4,6,5,4,32,3
                          };
            ulong nodesCount = 16;
            ulong nodeId = 8;
            DivideProblemMessage expectedMessage = new DivideProblemMessage(
                    problemType, problemId, data, nodesCount, nodeId);

            Assert.AreEqual(expectedMessage, actualMessage);
        }
Пример #6
0
 public static DivideProblemMessage CreateDivideProblemMessage()
 {
     string problemType = "TSP";
     ulong problemId = 12;
     byte[] data = {
                      1,2,4,6,5,4,32,3
                   };
     ulong nodesCount = 16;
     ulong nodeId = 8;
     DivideProblemMessage expectedMessage = new DivideProblemMessage(
             problemType, problemId, data, nodesCount, nodeId);
     return expectedMessage;
 }