예제 #1
0
        /// <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();
        }
예제 #2
0
 /// <summary>
 /// Инициализатор класса <see cref="CommStream"/>
 /// </summary>
 /// <param name="c">Блок с которым идет обмен данными</param>
 public CommStream(SmsModemBlock c)
 {
     comm = c;
     if (!comm.IsOpen())
     {
         comm.Open();
     }
 }
예제 #3
0
 /// <summary>
 /// Добавляет элемент в бд
 /// </summary>
 /// <param name="comm"></param>
 public void AddItemToDb(SmsModemBlock comm)
 {
     using (ComContext DB = new ComContext())
     {
         DB.activeComs.Add(comm);
         DB.SaveChanges();
     }
 }
예제 #4
0
 /// <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);
     }
 }
예제 #5
0
        private void GetModemData(object com)
        {
            SmsModemBlock comm = (SmsModemBlock)com;

            GetCurrentIMSI(comm);
            GetModemOperator(comm);
            GetSignalLevel(comm);
            GetBalance(comm);
        }
예제 #6
0
        /// <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;
        }
예제 #7
0
        /// <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);
                    }
                }
            }
        }
예제 #8
0
 /// <summary>
 /// Запрашивает баланс
 /// </summary>
 /// <param name="comm"></param>
 private void GetBalance(SmsModemBlock comm)
 {
     comm.GetBalance();
 }
예제 #9
0
 /// <summary>
 /// Получает уровень сигнала
 /// </summary>
 /// <param name="comm">Модем, для которого делается запрос</param>
 private void GetSignalLevel(SmsModemBlock comm)
 {
     comm.GetSignalStrength();
 }
예제 #10
0
 /// <summary>
 /// Получить номер сим карты для блока
 /// </summary>
 /// <param name="block"></param>
 public void GetCurrentIMSI(SmsModemBlock block)
 {
     block.GetICCID();
 }
예제 #11
0
 /// <summary>
 /// Получить значение оператора для блока
 /// <para>Необходимо выполнять при открытом порте</para>
 /// </summary>
 /// <param name="block"></param>
 public void GetModemOperator(SmsModemBlock block)
 {
     block.GetOperator();
 }
예제 #12
0
        /// <summary>
        /// Выполняет запрос номера телефона в зависимости от оператора
        /// </summary>
        /// <param name="block"></param>
        public void RequestTelNumber(object b)
        {
            SmsModemBlock block = (SmsModemBlock)b;

            block.GetTelNumber();
        }