public void SendStatusThread()
        {
            while (!statusThreadCancellationTokenSource.IsCancellationRequested)
            {
                var socket = communicationModule.SetupClient();
                communicationModule.Connect(socket);

                var st = new StatusThread()
                {
                    HowLong           = (ulong)(DateTime.Now - startTime).TotalMilliseconds,
                    TaskId            = 1,
                    State             = StatusThreadState.Idle,
                    ProblemType       = "DVRP",
                    ProblemInstanceId = 1,
                    TaskIdSpecified   = true
                };
                var statusMessage       = new StatusMessage(this.NodeId, new StatusThread[] { st });
                var statusMessageString = SerializeMessage(statusMessage);
                communicationModule.SendData(statusMessageString, socket);
                var receivedMessage = communicationModule.ReceiveData(socket);

                communicationModule.CloseSocket(socket);

                if (!String.IsNullOrEmpty(receivedMessage))
                {
                    ProcessMessage(receivedMessage);
                }

                Thread.Sleep((int)(threadSleepTimeout * 0.8));
            }
        }
Example #2
0
 /// <summary>
 ///     Returns a status message based on this object
 /// </summary>
 /// <returns></returns>
 public StatusMessage ToStatusMessage()
 {
     StatusThread[] statusThreads = new StatusThread[ParallelThreads];
     for (int i = 0; i < ParallelThreads; i++)
     {
         statusThreads[i] = TaskThreads[i].StatusThread;
     }
     return(new StatusMessage(Id, statusThreads));
 }
 public StatusInformationBar(TextBox tb)
 {
     StatusBox  = tb;
     IsRunning  = true;
     HasChanged = true;
     Indicators = new Dictionary <string, string>();
     Task       = new StatusThread(this);
     Task.Start();
 }
Example #4
0
        /******************************************************************/
        /************************** CONSTRUCTORS **************************/
        /******************************************************************/

        public TaskThread(int id, string solvableProblem, MessageProcessor messageProcessor, int nodeID)
        {
            NodeID = nodeID;
            ID     = id;
            // UCCTaskSolver.TaskSolver taskSolver = UCCTaskSolver.TaskSolverCreator();
            //TaskSolver = taskSolver;
            StatusThread     = new StatusThread(StatusThreadState.Idle);
            MessageProcessor = messageProcessor;
            SolvableProblem  = solvableProblem;
        }
        public static StatusMessage CreateStatusMessage()
        {
            ulong id = 12;

            StatusThread statusThread1 = new StatusThread(StatusThreadState.Idle);
            StatusThread statusThread2 = new StatusThread(StatusThreadState.Idle);

            ulong  howLong           = 1000;
            ulong  problemInstanceId = 2;
            ulong  taskId            = 1;
            string problemType       = "TCP";

            StatusThread statusThread3 = new StatusThread(StatusThreadState.Busy, howLong, problemInstanceId, taskId, problemType);

            StatusThread[] statusThreads = { statusThread1, statusThread2, statusThread3 };

            StatusMessage expectedMessage = new StatusMessage(id, statusThreads);

            return(expectedMessage);
        }
Example #6
0
        public void TestMethod1()
        {
            // START THREAD
            var thread = new Thread(new ThreadStart(() => Task.WhenAll(taskPool)));

            thread.Start();

            // STATUS DELEGATE
            StatusThread status = (k, m) =>
            {
                System.Diagnostics.Debug.WriteLine($"Thread {k}; status message={m}");
                Console.WriteLine($"Thread {k}; status message={m}");
            };

            // PARAMS
            string output_file = Path.Combine(Directory.GetCurrentDirectory(), "converted");

            string[] formats = new[] { "CSV", "TXT" };

            int count = 2;     //count gen files
            int lines = 500;   //count gen lines

            // WORK
            for (int i = count; i >= 1; i--)
            {
                var fileName = CreateBinFile(Path.Combine(Directory.GetCurrentDirectory(), "binary", $"temp_{i}.bin"), lines * i).Result;
                taskPool.Add(WorkMethod(fileName, output_file, formats, status));
                Thread.Sleep(500);
            }


            //Thread.Sleep(50000);
            //thread.Abort();
            while (true)
            {
                ;
            }
        }
        public void Parse_XMLString_StatusMessage()
        {
            /*********** Actual message ***********/
            string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"xml_samples\Status.xml");

            XmlDocument xmlDoc = new XmlDocument();

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

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

            if (name == StatusMessage.ELEMENT_NAME)
            {
                actualMessage = StatusMessage.Construct(xmlStr);
            }

            /*********** Expected message ***********/
            ulong id = 12;

            StatusThread statusThread1 = new StatusThread(StatusThreadState.Idle);
            StatusThread statusThread2 = new StatusThread(StatusThreadState.Idle);

            ulong  howLong           = 1000;
            ulong  problemInstanceId = 2;
            ulong  taskId            = 1;
            string problemType       = "TCP";

            StatusThread statusThread3 = new StatusThread(StatusThreadState.Busy, howLong, problemInstanceId, taskId, problemType);

            StatusThread[] statusThreads = { statusThread1, statusThread2, statusThread3 };

            StatusMessage expectedMessage = new StatusMessage(id, statusThreads);

            Assert.AreEqual(expectedMessage, actualMessage);
        }
Example #8
0
        public void StatusMessageSerialization()
        {
            string testData   = System.IO.File.ReadAllText(@"XMLTestData\StatusMessage.xml");
            var    serializer = new ComputationSerializer <StatusMessage>();

            StatusThread st = new StatusThread()
            {
                State             = StatusThreadState.Idle,
                HowLong           = 1,
                ProblemInstanceId = 1,
                TaskId            = 5,
                TaskIdSpecified   = true,
                ProblemType       = "TSP"
            };

            var statusMessage = new StatusMessage()
            {
                Id      = 1,
                Threads = new StatusThread[] { st }
            };
            var result = serializer.Serialize(statusMessage);

            Assert.AreEqual(result, testData);
        }
        private void TaskWork()
        {
            networkAdapter.StartConnection();
            SendRegisterMessage();
            RecieveRegisterResponse();
            networkAdapter.CloseConnection();
            statusThreads = new StatusThread[1];

            statusThreads[0] = new StatusThread { State = StatusThreadState.Idle, HowLong = 0, TaskId = registerResponse.Id, ProblemType = "DVRP" };
            networkAdapter.CurrentStatus = new Status { Id = registerResponse.Id, Threads = statusThreads };
            int timeout = int.Parse(registerResponse.Timeout.Substring(6, 2));
            networkAdapter.StartKeepAliveTask(timeout * 1000, SendPartialProblems, SendFinalSolution, ReceiveDivide, ReceiveSolutions);
        }
 private void initThread()
 {
     threads = new StatusThread[availableThreads];
     for (int i = 0; i < availableThreads;++i)
     {
         threads[i] = new StatusThread
         {
             HowLong = 0,
             State = StatusThreadState.Idle ,
         };
     }
 }
Example #11
0
        /// <summary>
        /// Загружет и конвертирует бинарные файлы в пользовательские форматы.
        /// Результат сохраняется в папке.
        /// </summary>
        /// <param name="input_fileName">Бинарный файл</param>
        /// <param name="output_Path">Папка в которую сохраняются сконвертированные файлы</param>
        /// <param name="formats">Массив выходных форматов</param>
        /// <param name="status">Обработчик сообщений</param>
        /// <returns></returns>
        private Task WorkMethod(string input_fileName, string output_Path, string[] formats, StatusThread status = null)
        {
            return(Task.Run(() =>
            {
                if (!Directory.Exists(output_Path))
                {
                    Directory.CreateDirectory(output_Path);
                }
                var fInf = new FileInfo(input_fileName);
                string outFileName = fInf.Name.Replace(fInf.Extension, string.Empty);

                // READ BIN FILE
                List <TradeRecord> records = new List <TradeRecord>();
                if (File.Exists(input_fileName))
                {
                    // CREATE ARRAY WRITE STREAMS
                    Dictionary <string, TEMPSt> help = new Dictionary <string, TEMPSt>();
                    foreach (var f in formats)
                    {
                        try
                        {
                            status?.Invoke(fInf.Name, $"Initialize {f}Converter...");
                            var inst = Activator.CreateInstance(Assembly.GetExecutingAssembly().FullName, $"{f}Converter");
                            var converter = inst.Unwrap() as Interfaces.ToFileConverter;

                            help.Add(f,
                                     new TEMPSt(
                                         new FileStream(Path.Combine(output_Path, $"{outFileName}.{f}"), FileMode.Create),
                                         converter));
                        }
                        catch (Exception)
                        {
                            status?.Invoke(fInf.Name, $"Error! No exists class {f}Converter!");
                        }
                    }

                    // READING
                    using (var fs = new FileStream(input_fileName, FileMode.Open))
                    {
                        status?.Invoke(fInf.Name, "Start reading...");
                        byte[] buff = new byte[Marshal.SizeOf(typeof(TradeRecord))];
                        int cnt = 0;
                        while (fs.Read(buff, 0, buff.Length) > 0)
                        {
                            var record = Helpers.StructSerializer.DeserializeStruct <TradeRecord>(buff);

                            // CONVERT TO FORMATS
                            foreach (var f in formats)
                            {
                                if (!help.ContainsKey(f))
                                {
                                    break;
                                }
                                help[f].converter.Convert(record);
                                help[f].converter.Save(help[f].stream);
                                help[f].stream.Flush(true);
                            }
                            double percent = ((double)fs.Position / (double)fs.Length) * 100;
                            status?.Invoke(fInf.Name, $"Read record={cnt++}; complete={percent:0.00}%");
                        }
                    }

                    // CLEAR
                    foreach (var h in help)
                    {
                        h.Value.stream.Close();
                    }
                    help.Clear();

                    status?.Invoke(fInf.Name, $"Complete!");
                }
            }));
        }