Esempio n. 1
0
 // Запуск мониторинга
 private void m_RunMonitoring_Click(object sender, EventArgs e)
 {
     if (b_Connect && (m_Monitoring == null || (m_Monitoring != null && !m_Monitoring.GetRun)))
     {
         // Создание потока и передача ему параметров
         m_Monitoring = new Monitoring(k_Base, d_InputTable, d_OutputTable);
         m_Monitoring.RunMonitoring();
     }
 }
Esempio n. 2
0
        // Основной метод
        private void MainMethod()
        {
            try
            {
                CancellationToken c_Token = c_TokenCancel.Token;
                // Установка для сокета локальной конечной точки
                IPHostEntry i_IpHost     = Dns.GetHostEntry("localhost");
                IPAddress   i_IpAddress  = i_IpHost.AddressList[1];
                IPEndPoint  i_IpEndPoint = new IPEndPoint(i_IpAddress, 1111);
                // Сокет Tcp/Ip
                s_Listener = new Socket(i_IpAddress.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
                // Назначение сокета локальной конечной точке и прослушивание входящих сокетов (1 подключение)
                s_Listener.Bind(i_IpEndPoint);
                s_Listener.Listen(1);

                // Прослушивание соединения
                while (!c_Token.IsCancellationRequested)
                {
                    try
                    {
                        // Ожидание входящего соединения
                        Socket s_Connection = s_Listener.Accept();
                        // Считывание данных при подключении (Если есть)
                        byte[] b_Message = new byte[1024];
                        if (s_Connection.Available > 0)
                        {
                            s_Connection.Receive(b_Message);
                        }

                        // Мы дождались клиента, пытающегося с нами соединиться, получаем данные
                        // Получение имени формулы от клиента
                        string s_FormulaName = GetFormulaName(s_Connection);

                        // Считывание пустой строки (если есть)
                        while (s_Connection.Available > 0)
                        {
                            s_Connection.Receive(b_Message);
                        }

                        // Получение входных параметров от клиента
                        string[] s_InputParameters = GetInputParameters(s_Connection);

                        // Считывание пустой строки (если есть)
                        while (s_Connection.Available > 0)
                        {
                            s_Connection.Receive(b_Message);
                        }

                        // Получение выходного параметра от клиента
                        string s_OutputParameter = GetOutputParameter(s_Connection);

                        // Считывание пустой строки (если есть)
                        while (s_Connection.Available > 0)
                        {
                            s_Connection.Receive(b_Message);
                        }

                        // Получение формулы от клиента
                        string s_Formula = GetFormula(s_Connection, s_InputParameters);

                        // Считывание пустой строки (если есть)
                        while (s_Connection.Available > 0)
                        {
                            s_Connection.Receive(b_Message);
                        }

                        // Сообщение о закрытии
                        string s_Data = "Изменения приняты, для внесения новых изменений выполните повторное подключение.";
                        s_Data   += Environment.NewLine;
                        b_Message = Encoding.UTF8.GetBytes(s_Data);
                        s_Connection.Send(b_Message);

                        Thread.Sleep(1000);

                        s_Connection.Shutdown(SocketShutdown.Both);
                        s_Connection.Close();

                        // Остановка мониторинга
                        bool b_RunMonitoring = m_Monitoring.GetRun;
                        m_Monitoring.StopMonitoring();

                        // Изменение базы знаний
                        k_Base.EditKnowledgeBase(s_Formula, s_InputParameters, s_OutputParameter, s_FormulaName);

                        // Вывод в таблицу
                        int i_Count = 0;
                        for (int i = 0; i < k_Base.DataAboutFormulas.Length; i++)
                        {
                            i_Count += k_Base.DataAboutFormulas[i].GetInputParameters.Length;
                        }
                        string[,] s_Input  = new string[i_Count, 2];
                        string[,] s_Output = new string[k_Base.DataAboutFormulas.Length, 2];
                        i_Count            = 0;
                        for (int i = 0; i < k_Base.DataAboutFormulas.Length; i++)
                        {
                            for (int j = 0; j < k_Base.DataAboutFormulas[i].GetInputParameters.Length; j++)
                            {
                                s_Input[i_Count, 0] = k_Base.DataAboutFormulas[i].GetInputParameters[j];
                                s_Input[i_Count, 1] = "";
                                i_Count++;
                            }
                            s_Output[i, 0] = k_Base.DataAboutFormulas[i].GetOutputParameter;
                            s_Output[i, 1] = "";
                        }
                        Table.MainOutputInfoInTables(d_InputTable, d_OutputTable, s_Input, s_Output);

                        // Запуск мониторинга
                        if (b_RunMonitoring)
                        {
                            m_Monitoring.RunMonitoring();
                        }
                    }
                    catch (Exception) { }
                }
            }
            catch (Exception e_Ex)
            {
                MessageBox.Show("Код ошибки: " + Math.Abs(e_Ex.GetHashCode()) + ", обратитесь в техподдержку.");
            }
        }