//TVTest呼び出し void Call(CallNum cn) { var handle = FindWindow("/tvmaid/win", driverId); if (handle == IntPtr.Zero) { throw new AppException("TVTest呼び出しに失敗しました。通信用ウインドウがありません。"); } UIntPtr result; IntPtr ret = SendMessageTimeout(handle, (uint)cn, UIntPtr.Zero, IntPtr.Zero, (uint)SendMessageTimeoutFlags.SMTO_NORMAL, timeout, out result); if (ret.ToInt32() == 0) { throw new AppException("TVTest呼び出しに失敗しました。時間内に応答がありません。"); } uint code = result.ToUInt32(); if (code != 0) { throw new TvProcessExceotion(code, "TVTestでエラーが発生しました。エラーコード: " + code); } }
/// <summary> /// Отправить команду ТУ /// </summary> public override void SendCmd(Command cmd) { base.SendCmd(cmd); lastCommSucc = false; if (cmd.CmdTypeID == BaseValues.CmdTypes.Binary && (cmd.CmdNum == 1 || cmd.CmdNum == 2)) { string cmdDataStr = cmd.GetCmdDataStr(); if (cmdDataStr != "") { Connection.WriteToLog = WriteToLog; if (cmd.CmdNum == 1) { // извлечение получателя и текста сообщения из данных команды // для основного КП: <группа, контакт или телефон>;<текст сообщения> // для остальных КП: <текст сообщения> string recipient; string msgText; if (primary) { int scPos = cmdDataStr.IndexOf(';'); recipient = scPos >= 0 ? cmdDataStr.Substring(0, scPos).Trim() : ""; msgText = scPos >= 0 ? cmdDataStr.Substring(scPos + 1) : cmdDataStr; } else { recipient = CallNum.Trim(); msgText = cmdDataStr; } if (recipient == "" || msgText == "") { WriteToLog(Localization.UseRussian ? "Получатель или текст сообщения отсутствует" : "Recipient or message text is missing"); } else { // формирование списка телефонных номеров для отправки сообщений List <string> phoneNumbers = GetPhoneNumbers(recipient); // отправка сообщений if (phoneNumbers.Count > 0) { lastCommSucc = SendMessages(msgText, phoneNumbers); } else { WriteToLog(string.Format(Localization.UseRussian ? "\"{0}\" не содержит телефонных номеров" : "\"{0}\" does not contain phone numbers", recipient)); } } } else { // произвольная AT-команда Connection.WriteLine(cmdDataStr); Connection.ReadLines(ReqParams.Timeout, OkErrStopCond, out lastCommSucc); Thread.Sleep(ReqParams.Delay); } } else { WriteToLog(CommPhrases.NoCmdData); } } else { WriteToLog(CommPhrases.IllegalCommand); } CalcCmdStats(); }
// Update the source data object when the user clicks // the submit button. private void Button_Click(object sender, RoutedEventArgs e) { BindingExpression be = CallNum.GetBindingExpression(TextBox.TextProperty); be.UpdateSource(); }
//<SnippetValidateWithoutUpdate> // Check whether the call number is valid when the // TextBox loses foces. private void CallNum_LostFocus(object sender, RoutedEventArgs e) { BindingExpression be = CallNum.GetBindingExpression(TextBox.TextProperty); be.ValidateWithoutUpdate(); }
/// <summary> /// Отправить команду ТУ /// </summary> public override void SendCmd(Command cmd) { base.SendCmd(cmd); lastCommSucc = false; if (cmd.CmdTypeID == BaseValues.CmdTypes.Binary && (cmd.CmdNum == 1 || cmd.CmdNum == 2)) { string cmdData = new string(Encoding.Default.GetChars(cmd.CmdData)); if (cmdData.Length > 0) { Connection.WriteToLog = WriteToLog; if (cmd.CmdNum == 1) { // извлечение адресата и текста сообщения из данных команды // для основного КП: <телефон или группа>;<текст сообщения> // для остальных КП: <текст сообщения> int scPos = cmdData.IndexOf(';'); string phoneOrGroup = primary ? (scPos > 0 ? cmdData.Substring(0, scPos).Trim() : "") : CallNum.Trim(); string msgText = scPos < 0 ? cmdData : scPos + 1 < cmdData.Length ? cmdData.Substring(scPos + 1).Trim() : ""; if (phoneOrGroup == "" || msgText == "") { WriteToLog(Localization.UseRussian ? "Телефонный номер, группа или текст сообщения отсутствует" : "Phone number, group or message text is missing"); } else { // отправка сообщений Phonebook.PhoneGroup phoneGroup; if (phonebook != null && phonebook.PhoneGroups.TryGetValue(phoneOrGroup, out phoneGroup)) { if (phoneGroup.PhoneNumbers.Count > 0) { lastCommSucc = SendMessages(msgText, phoneGroup.GetPhoneNumbers()); } else { WriteToLog(string.Format(Localization.UseRussian ? "Группа \"{0}\" пуста" : "The group \"{0}\" is empty", phoneOrGroup)); } } else { lastCommSucc = SendMessages(msgText, phoneOrGroup); } } } else { // произвольная AT-команда Connection.WriteLine(cmdData); Connection.ReadLines(ReqParams.Timeout, OkErrStopCond, out lastCommSucc); Thread.Sleep(ReqParams.Delay); } } else { WriteToLog(CommPhrases.NoCmdData); } } else { WriteToLog(CommPhrases.IllegalCommand); } CalcCmdStats(); }
/// <summary> /// Установить TCP-соединение, если оно отсутствует /// </summary> private bool TcpConnect() { if (tcpClient == null) { // создание TCP-клиента tcpClient = new TcpClient(); tcpClient.NoDelay = true; tcpClient.SendTimeout = KPReqParams.Timeout; tcpClient.ReceiveTimeout = KPReqParams.Timeout; } if (tcpClient.Connected) { return(true); } else { if ((LastSessDT - connectDT).TotalSeconds >= TcpConnectPer || LastSessDT < connectDT /*время переведено назад*/) { WriteToLog((Localization.UseRussian ? "Установка TCP-соединения с " : "Establish a TCP connection with ") + CallNum); connectDT = LastSessDT; try { // определение IP-адреса и номера порта IPAddress addr; int port; string[] parts = CallNum.Split(new char[] { ':', ' ' }, StringSplitOptions.RemoveEmptyEntries); if (parts.Length >= 1) { addr = IPAddress.Parse(parts[0]); } else { throw new Exception(Localization.UseRussian ? "Не определён IP-адрес" : "IP address is undefined"); } if (!(parts.Length >= 2 && int.TryParse(parts[1], out port))) { port = Modbus.DefTcpPort; } // соединение tcpClient.Connect(addr, port); netStream = tcpClient.GetStream(); modbus.NetStream = netStream; return(true); } catch (Exception ex) { WriteToLog((Localization.UseRussian ? "Ошибка при установке TCP-соединения: " : "Error establishing TCP connection: ") + ex.Message); return(false); } } else { WriteToLog(string.Format(Localization.UseRussian ? "Попытка установки TCP-соединения может быть не ранее, чем через {0} с после предыдущей" : "Attempt to establish TCP connection can not be earlier than {0} seconds after the previous", TcpConnectPer)); return(false); } } }