Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: TAPI calls monitoring
АРТКОМ Форум > Форумы для специалистов > Техническая поддержка ipLDK
from_mars
Пишу программу, которая должна отслеживать звонки на АТС (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
я так понимаю что исходник отсюда - http://www.julmar.com/tapi/ ?

Как запущено TAPI - TSP драйвер на выделенном сервере или на компе, где сам софт?
А если запустить exe с этого сайта - теряет связь или нет?
ALLeX
Цитата(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
Я запускал и мучил TAPI много дней к ряду ( в процессе обучения что это такое и как с ним бороться) , работало устойчиво, правда не на этих исходниках.

from_mars
Цитата(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
Цитата(from_mars @ 3.3.2009, 1:53) *
В смысле? smile.gif


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

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

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

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

Одновременно и в режиме 3rd party? Вы ничего не путаете?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2025 IPS, Inc.