/// <summary> /// Получает порты на которых висят модемы (в несколько потоков) /// </summary> public void GetModemPorts() { //очищаем старую Queue activeComsQueue = new ConcurrentQueue <SmsModemBlock>(); activeComs.Clear(); var ports = SerialPort.GetPortNames(); List <Thread> _threadList = new List <Thread>(); foreach (var port in ports) { //создаем объект устройства SmsModemBlock com = new SmsModemBlock(port, 115200); //И поток Thread myThread = new Thread(new ParameterizedThreadStart(CheckModemConncetion)); myThread.Name = port + " GetPort"; _threadList.Add(myThread); // передаем в поток наш порт myThread.Start(com); } // ждем всех WaitForAllThreadsToComplete(_threadList); //activeComs = activeComsQueue.ToList(); }
/// <summary> /// Инициализатор класса <see cref="CommStream"/> /// </summary> /// <param name="c">Блок с которым идет обмен данными</param> public CommStream(SmsModemBlock c) { comm = c; if (!comm.IsOpen()) { comm.Open(); } }
/// <summary> /// Добавляет элемент в бд /// </summary> /// <param name="comm"></param> public void AddItemToDb(SmsModemBlock comm) { using (ComContext DB = new ComContext()) { DB.activeComs.Add(comm); DB.SaveChanges(); } }
/// <summary> /// Удаляет элемент из списка активных /// </summary> /// <param name="comm"></param> public void DeleteFromActiveComs(SmsModemBlock comm) { lock (this) { var comForm = MF.OwnedForms.First(f => ((CommForm)f).comm == comm); comForm.Close(); activeComs.Remove(comm); } }
private void GetModemData(object com) { SmsModemBlock comm = (SmsModemBlock)com; GetCurrentIMSI(comm); GetModemOperator(comm); GetSignalLevel(comm); GetBalance(comm); }
/// <summary> /// Создает новую форму /// </summary> /// <param name="portname">Имя порта</param> public CommForm(SmsModemBlock phone) { comm = phone; //Comm = new SmsModemBlock(phone.PortName, phone.BaudRate); InitializeComponent(); this.Text = comm.PortName + " " + comm.TelNumber; this.Name = "CommForm" + comm.PortName; comm.NumberReceived += Comm_NumberRecieved; }
/// <summary> /// Проверка на наличие нашего устройства на этом порте /// </summary> /// <param name="com"></param> private void CheckModemConncetion(object com) { SmsModemBlock comm = (SmsModemBlock)com; //открываем соединение using (new CommStream(comm)) { if (comm.IsConnected()) { if (comm.IsSimPresent()) { comm.SimBankId = this.MacAddress; activeComsQueue.Enqueue(comm); } } } }
/// <summary> /// Запрашивает баланс /// </summary> /// <param name="comm"></param> private void GetBalance(SmsModemBlock comm) { comm.GetBalance(); }
/// <summary> /// Получает уровень сигнала /// </summary> /// <param name="comm">Модем, для которого делается запрос</param> private void GetSignalLevel(SmsModemBlock comm) { comm.GetSignalStrength(); }
/// <summary> /// Получить номер сим карты для блока /// </summary> /// <param name="block"></param> public void GetCurrentIMSI(SmsModemBlock block) { block.GetICCID(); }
/// <summary> /// Получить значение оператора для блока /// <para>Необходимо выполнять при открытом порте</para> /// </summary> /// <param name="block"></param> public void GetModemOperator(SmsModemBlock block) { block.GetOperator(); }
/// <summary> /// Выполняет запрос номера телефона в зависимости от оператора /// </summary> /// <param name="block"></param> public void RequestTelNumber(object b) { SmsModemBlock block = (SmsModemBlock)b; block.GetTelNumber(); }