Пример #1
0
        //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);
            }
        }
Пример #2
0
        /// <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();
        }
Пример #3
0
        // 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();
        }
Пример #4
0
        //<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();
        }
Пример #5
0
        /// <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();
        }
Пример #6
0
        /// <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);
                }
            }
        }