Russian Qt Forum
Ноябрь 23, 2024, 01:02 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Клиент для SMDR от телефонной станции.  (Прочитано 5140 раз)
smartchecker
Гость
« : Апрель 08, 2009, 11:24 »

Привет.

Есть желание написать клиента, который будет ловить то, что выдаёт тел.станция по SMDR и складывать это в postgresql.
Где почитать как это правильно делать на QT?
Да, станция отдаёт всё по tcp/5100. Как я понимаю, для взаимодействия с ней нужно использовать QTcpSocket.

Пример лога со станции
Код:
             SMDR REPORT FOR [                 ] Apr/08/2009 12:46

================================================================================
  T EXT  AUTH TRK  MM/DD STT.TIME DURATION FG DIALED DIGIT          COST
================================================================================
  1 2822      *704 04/08 12:48:09 00:00:25 O  4828546                0.00
  1 2837      *703 04/08 12:49:08 00:00:06 I                         0.00
  1 2824      *704 04/08 12:49:11 00:00:03 O  3240524                0.00
  1 2843      *705 04/08 12:46:47 00:04:01 O  3183180                0.00
  1 2861      *703 04/08 12:51:31 00:00:47 I                         0.00
  1 2803      *704 04/08 12:53:14 00:00:08 IT                        0.00
  1 2824      *704 04/08 12:53:22 00:01:49 T                         0.00
  1 2847      *705 04/08 12:53:18 00:03:59 O  3268969                0.00
  1 2822      *704 04/08 12:56:07 00:01:30 O  3292219                0.00
  1 2861      *703 04/08 13:02:54 00:00:11 IT                        0.00
  1 2839      *703 04/08 13:03:04 00:00:47 T                         0.00
  1 2861      *703 04/08 13:04:38 00:00:16 IT                        0.00
  1 2839      *703 04/08 13:04:53 00:00:38 T                         0.00
  1 2846      *705 04/08 13:05:15 00:00:13 O  5401295                0.00

Как я себе вижу логику.
Это должен быть linux'овый демон, которого можно пинать через start|stop.
При старте он цепляется за станционный SMDR, который вещает с tcp/5100 и читает то, что станция ему выдаёт, полученные данные парсит и складывает в postgresql. Если соединение со станцией порвалось, то пытается его восстановить.
« Последнее редактирование: Апрель 08, 2009, 13:48 от smartchecker » Записан
Rcus
Гость
« Ответ #1 : Апрель 08, 2009, 14:06 »

Собственно в чем вопрос? Как установить обработчики сигналов? Как использовать сокеты? Или проблема в обработке данных?
Когда я работал с логами атс у меня наибольшие проблемы были в сведении времени на атс и времени в логах операторов. Ну и меньшая проблема была со сбоями в логах (теперь уже не узнать то ли это была битая память компьютера, либо проблема на атс)
« Последнее редактирование: Апрель 08, 2009, 14:09 от Rcus » Записан
smartchecker
Гость
« Ответ #2 : Апрель 08, 2009, 15:01 »

Собственно в чем вопрос?
Читаю здесь http://doc.qtsoftware.com/4.5/network-fortuneclient.html
Упоминается две вещи

The asynchronous (non-blocking) approach.
The synchronous (blocking) approach.

В каком режиме для этой задачи использовать?
Как правильнее организовать, собственно, получение данных от SMDR? TCP ж, всё-таки...
Приходить куски могут вразнобой. Кто их будет собирать в правильном порядке?
Во что лучше читать? В QByteArray?

Кророче, пример кода хочется для изучения.

« Последнее редактирование: Апрель 08, 2009, 16:54 от smartchecker » Записан
smartchecker
Гость
« Ответ #3 : Апрель 09, 2009, 12:58 »

Кто-нибуь направит?
Во всех примерах используется QDataStream, но, как я понимаю, это означает, что на обоих концах соединения должны быть приложения, написанные на QT?
Записан
Rcus
Гость
« Ответ #4 : Апрель 09, 2009, 13:18 »

Не обязательно /** \see Torrent client example */
Можно сделать так:
Код
C++ (Qt)
...
connect(socket,SIGNAL(readyRead()), dataProcessor, SLOT(readData()));
...
void DataProcessor::readData()
{
   while (socket->canReadLine()) {
       const QString line = QString::fromAscii(socket->readLine());
       //parse line ...
   }
}
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.074 секунд. Запросов: 20.