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