ARTCOM LOGO

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> TAPI calls monitoring
from_mars
сообщение 2.3.2009, 7:24
Сообщение #1


Частый гость
***

Группа: Участники
Сообщений: 42
Регистрация: 11.8.2008
Пользователь №: 11688



Пишу программу, которая должна отслеживать звонки на АТС (ipLDK 300 3.7Ce) через TAPI.

Подключиться получается, и даже уведомления о звонках получаю, но через пол часа или час, уведомления перестают приходить. Перезапуск программы (как выяснилось позже) дает результат, но уведомления перестают приходить уже через минут 10 - 15.

Кто сталкивался с подобным, подскажите где собака зарыта? )

Вот код, который слушает события от АТС.

CODE
DWORD g_dwAPIVersion = 0x00020001;
DWORD g_dwExtVersion = 0;


unsigned __stdcall line_event_proc(void* p)
{
LINEMESSAGE lm;
LPLINECALLSTATUS lpCallStatus;
long lResult;
DWORD dwLCSSize;
TCHAR szBuff[4096];
int nBuffPos;

dwLCSSize = sizeof(LINECALLSTATUS) + 4096;

lpCallStatus = (LPLINECALLSTATUS)malloc(dwLCSSize);

SYSTEMTIME st;

while (true) {
lResult = lineGetMessage(g_hLineApp, &lm, INFINITE);

if (lResult != 0) {
if (lResult == LINEERR_INVALAPPHANDLE){
_tprintf(_T("Application shuting down, leaving thread\n"));
return 0;
}

_tprintf(_T("EventThreadFunc: error on lineGetMessage: %x\n"), lResult);
Sleep(100);
continue;
}


if (LINE_CALLSTATE == lm.dwMessageID) {

memset(lpCallStatus, 0, dwLCSSize);
lpCallStatus->dwTotalSize = dwLCSSize;

// line status
if (!lineGetCallStatus(lm.hDevice, lpCallStatus)) {
switch(lpCallStatus->dwCallState) { // здесь обрабатываю сообщения

}

}

}
}

return 0;
}



int _tmain(int argc, _TCHAR* argv[])
{
LINEINITIALIZEEXPARAMS lip = {};

lip.dwTotalSize = sizeof(LINEINITIALIZEEXPARAMS);
lip.dwOptions = LINEINITIALIZEEXOPTION_USEEVENT;

lResult = lineInitializeEx(&g_hLineApp, GetModuleHandle(NULL), NULL, _T("TAPI call monitor"),
&dwNumDevs, &g_dwAPIVersion, &lip);


g_hTAPIEvent = lip.Handles.hEvent;

hThread = (HANDLE)_beginthreadex(NULL, 0, &line_event_proc, NULL, 0, &nThreadID);

for (DWORD dwDeviceID = 0; dwDeviceID < dwNumDevs; dwDeviceID++) {
HLINE hLine;
LINEEXTENSIONID lineExtensionID = {};

lResult = lineNegotiateAPIVersion(g_hLineApp, dwDeviceID, dwAPILowVersion, dwAPIHighVersion,
&g_dwAPIVersion, &lineExtensionID);

lResult = lineOpen (g_hLineApp, dwDeviceID, &hLine, g_dwAPIVersion, g_dwExtVersion, NULL,
LINECALLPRIVILEGE_MONITOR, 0, NULL);

}

getchar();
Sleep(100);
}
Перейти в начало страницы
 
+Цитировать сообщение
vldmr
сообщение 2.3.2009, 10:10
Сообщение #2


Ветеран форума
*****

Группа: Участники
Сообщений: 1166
Регистрация: 29.8.2007
Из: Москва
Пользователь №: 4065



я так понимаю что исходник отсюда - http://www.julmar.com/tapi/ ?

Как запущено TAPI - TSP драйвер на выделенном сервере или на компе, где сам софт?
А если запустить exe с этого сайта - теряет связь или нет?
Перейти в начало страницы
 
+Цитировать сообщение
ALLeX
сообщение 2.3.2009, 14:56
Сообщение #3


Продвинутый пользователь
****

Группа: Участники
Сообщений: 276
Регистрация: 28.1.2007
Пользователь №: 613



Цитата(vldmr @ 2.3.2009, 9:10) *
я так понимаю что исходник отсюда - http://www.julmar.com/tapi/ ?


Непохоже. Кстати у дуримара тоже глюков полно. Страшно смотреть как он например линии закрывает...

Цитата(from_mars @ 2.3.2009, 6:24) *
CODE

if (LINE_CALLSTATE == lm.dwMessageID) {

memset(lpCallStatus, 0, dwLCSSize);
lpCallStatus->dwTotalSize = dwLCSSize;

// line status
if (!lineGetCallStatus(lm.hDevice, lpCallStatus)) {
switch(lpCallStatus->dwCallState) { // здесь обрабатываю сообщения


В обработке LINE_CALLSTATE не хватает
if (lm.dwParam1==LINECALLSTATE_IDLE) {
lineDeallocateCall(lm.hDevice);
}

PS. А Вы упрямый! wink.gif
Перейти в начало страницы
 
+Цитировать сообщение
vldmr
сообщение 2.3.2009, 15:37
Сообщение #4


Ветеран форума
*****

Группа: Участники
Сообщений: 1166
Регистрация: 29.8.2007
Из: Москва
Пользователь №: 4065



Я запускал и мучил TAPI много дней к ряду ( в процессе обучения что это такое и как с ним бороться) , работало устойчиво, правда не на этих исходниках.

Перейти в начало страницы
 
+Цитировать сообщение
from_mars
сообщение 3.3.2009, 2:53
Сообщение #5


Частый гость
***

Группа: Участники
Сообщений: 42
Регистрация: 11.8.2008
Пользователь №: 11688



Цитата(vldmr @ 2.3.2009, 17:10) *
я так понимаю что исходник отсюда - http://www.julmar.com/tapi/ ?

Как запущено TAPI - TSP драйвер на выделенном сервере или на компе, где сам софт?
А если запустить exe с этого сайта - теряет связь или нет?


Да, писал на основе исходников этого сайта.
TSP на компе, на котором софт. Настроен как 3rd Pfrty Connection.
На счет exe с сайта, пробовал TCMON, проработал больше часа, потом пришлось выключить smile.gif Но по нему не понятно, были ли пропадания связи по TAPI. Еще погоняю. Надеюсь это моя ошибка.

Цитата(ALLeX)
В обработке LINE_CALLSTATE не хватает
if (lm.dwParam1==LINECALLSTATE_IDLE) {
lineDeallocateCall(lm.hDevice);
}


Спасибо, попробую.

Цитата(ALLeX)
PS. А Вы упрямый! wink.gif


В смысле? smile.gif
Перейти в начало страницы
 
+Цитировать сообщение
ALLeX
сообщение 3.3.2009, 19:27
Сообщение #6


Продвинутый пользователь
****

Группа: Участники
Сообщений: 276
Регистрация: 28.1.2007
Пользователь №: 613



Цитата(from_mars @ 3.3.2009, 1:53) *
В смысле? smile.gif


Если ничего не путаю, Вы давно боритесь с этой проблемой... Извините, если обознался...
Перейти в начало страницы
 
+Цитировать сообщение
from_mars
сообщение 10.3.2009, 12:16
Сообщение #7


Частый гость
***

Группа: Участники
Сообщений: 42
Регистрация: 11.8.2008
Пользователь №: 11688



Снова проблемы с тапи smile.gif
Опять та же песня - перестают приходить уведомления о звонках, но есть один момэнт smile.gif
Есть компутер - № 1, который подключен к АТС, с которого вводили ключи для инициализации TAPI, с которого местные программируют. Когда на нем запускаю свою прогу, она работает стабильно. Оставляли программу на ноч - судя по логам, полет нормальный, если и есть проподания уведомлений, то не больше 20 минут, да и то скорее всего в это время просто никто не звонил, потому как ночь.
Есть другой компутер - № 2, с другим IP, который тоже подцеплен к АТС. Если на нем запустить программу, то работает не больше часа, потом перестает получать уведомления с АТС.

Взяли компутер № 1 и поменяли IP, адрес. Программа стала работать как на компутере № 2 - перестает получать уведомления sad.gif

Вопрос. Есть ли какая-то привязка АТС, к компутеру или что-нить в этом духе?
Перейти в начало страницы
 
+Цитировать сообщение
ALLeX
сообщение 10.3.2009, 13:48
Сообщение #8


Продвинутый пользователь
****

Группа: Участники
Сообщений: 276
Регистрация: 28.1.2007
Пользователь №: 613



Цитата(from_mars @ 10.3.2009, 11:16) *
Вопрос. Есть ли какая-то привязка АТС, к компутеру или что-нить в этом духе?

Привязки к ПК нет.
Тут теоретически возможна следующая ситуация (если у вас подключение 3rd party):
Если на обоих ПК установлен, и активен TSP драйвер LG, то станция будет отдавать события только ПК который загрузился последним. Т.е. предположим на ПК1 работает ваша программа, но если будет вкл/перезагружен ПК2, то программа перестанет получать события по простой причине - станция теперь их отсылает на ПК2.
Перейти в начало страницы
 
+Цитировать сообщение
vldmr
сообщение 10.3.2009, 15:48
Сообщение #9


Ветеран форума
*****

Группа: Участники
Сообщений: 1166
Регистрация: 29.8.2007
Из: Москва
Пользователь №: 4065



Станция может обслужить и два хоста (больше не пробовал)
У нас стоял драйвер на серваке и я параллельно запускал на своем компе и работало.
Перейти в начало страницы
 
+Цитировать сообщение
ALLeX
сообщение 11.3.2009, 4:58
Сообщение #10


Продвинутый пользователь
****

Группа: Участники
Сообщений: 276
Регистрация: 28.1.2007
Пользователь №: 613



Цитата(vldmr @ 10.3.2009, 14:48) *
Станция может обслужить и два хоста (больше не пробовал)

Одновременно и в режиме 3rd party? Вы ничего не путаете?
Перейти в начало страницы
 
+Цитировать сообщение

Ответить в данную темуНачать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 18.7.2025, 5:30