コード例 #1
0
ファイル: FormMain.cs プロジェクト: n0rthwind/fisher
        /// <summary>
        /// Изменяент цвета КП в дереве доступных объектов
        /// в зависимости от наличия связи. 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public void MonitorConnectonState(object sender, MsgArrivedEventArgs e)
        {
            // Модуль сгенерировавший событие
            ModulNevod modul = sender as ModulNevod;

            if (e.Message == "Failed")
            {
                treeViewConfig.NodeConnectionState(modul.ModulName, false);
            }
            else
            {
                treeViewConfig.NodeConnectionState(modul.ModulName, true);
            }
        }
コード例 #2
0
ファイル: FormMain.cs プロジェクト: n0rthwind/fisher
        /// <summary>
        /// Вызывается при обновлении данных модуля
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void ShowData(object sender, MsgArrivedEventArgs e)
        {
            ModulNevod modul = sender as ModulNevod;

            if (this.InvokeRequired)
            {
                this.BeginInvoke((Action)delegate()
                {
                    RefreshTable(modul);
                });
            }
            else
            {
                RefreshTable(modul);
            }
        }
コード例 #3
0
ファイル: TcpServer.cs プロジェクト: n0rthwind/fisher
        /// <summary>
        /// Отправляет данные всем подключенным TCP-клиентам
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public static void SendDataClient(object sender, MsgArrivedEventArgs e)
        {
            if (TcpServer.ListOfClients.Count == 0) return;
            ModulNevod modul = sender as ModulNevod;

            // Отправка результата клиентам
            string data =
                "{\"NumberInt\":" + Convert.ToString(modul.inKpNum) + "," +
                "\"TI\":[" +
                modul.AnIn1.ToString(NumberFormatInfo.InvariantInfo) + "," +
                modul.AnIn2.ToString(NumberFormatInfo.InvariantInfo) + "," +
                modul.AnIn3.ToString(NumberFormatInfo.InvariantInfo) + "," +
                modul.AnIn4.ToString(NumberFormatInfo.InvariantInfo) + "," +
                modul.Temperature.ToString(NumberFormatInfo.InvariantInfo) + "],";

            // Дискретные переменные
            data +=
                "\"NumberDg\":" + Convert.ToString(modul.dgKpNum) + "," +
                "\"TS\":[" +
                Convert.ToString(modul.DgIn1) + "," +
                Convert.ToString(modul.DgIn2) + "," +
                Convert.ToString(modul.DgIn3) + "," +
                Convert.ToString(modul.DgIn4) + "," +
                Convert.ToString(modul.DgIn5) + "," +
                Convert.ToString(modul.DgIn6) + "," +
                Convert.ToString(modul.DgIn7) + "," +
                Convert.ToString(modul.DgIn8) + "],";

            // Время получения данных
            data +=
                "\"Time\":" +
                DateTime.Now.Ticks.ToString();

            data += "}";

            byte[] buffer = Encoding.UTF8.GetBytes(data);
            int size = 4 + buffer.Length;
            byte[] packet = new byte[size];

            // Структура пакета:
            // размер - время получения данных - данные

            // Указываем размер в начале пакета

            BitConverter.GetBytes(size).CopyTo(packet, 0);
            // Копируем данные
            buffer.CopyTo(packet, 4);

            for (int i = 0; i < ListOfClients.Count; i++)
            {
                // Здесь возникает ошибка, когда аварийно отключается клиент хоть и редко
                // try блок нас спасет...
                try
                {
                    ListOfClients[i].Client.GetStream().Write(packet, 0, packet.Length);
                    int a = ListOfClients[i].GetHashCode();
                }
                catch (Exception exp)
                {
                    Loger.SendMsg((int)MessagerId.Log, (int)MessagerId.DataServer,
                        exp.Message);
                    // Запись в лог-файл
                    Loger.WriteToFile("Потерянно соединение с клиентом №" +
                        ListOfClients[i].ToString());
                    ListOfClients.RemoveAt(i);
                    i = 0;
                }
            }
        }