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; }
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); }
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; }