![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
![]()
Сообщение
#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); } |
|
|
![]() |
![]()
Сообщение
#2
|
|
![]() Ветеран форума ![]() ![]() ![]() ![]() ![]() Группа: Участники Сообщений: 1166 Регистрация: 29.8.2007 Из: Москва Пользователь №: 4065 ![]() |
я так понимаю что исходник отсюда - http://www.julmar.com/tapi/ ?
Как запущено TAPI - TSP драйвер на выделенном сервере или на компе, где сам софт? А если запустить exe с этого сайта - теряет связь или нет? |
|
|
![]()
Сообщение
#3
|
|
Частый гость ![]() ![]() ![]() Группа: Участники Сообщений: 42 Регистрация: 11.8.2008 Пользователь №: 11688 ![]() |
я так понимаю что исходник отсюда - http://www.julmar.com/tapi/ ? Как запущено TAPI - TSP драйвер на выделенном сервере или на компе, где сам софт? А если запустить exe с этого сайта - теряет связь или нет? Да, писал на основе исходников этого сайта. TSP на компе, на котором софт. Настроен как 3rd Pfrty Connection. На счет exe с сайта, пробовал TCMON, проработал больше часа, потом пришлось выключить ![]() Цитата(ALLeX) В обработке LINE_CALLSTATE не хватает if (lm.dwParam1==LINECALLSTATE_IDLE) { lineDeallocateCall(lm.hDevice); } Спасибо, попробую. Цитата(ALLeX) PS. А Вы упрямый! wink.gif В смысле? ![]() |
|
|
![]() ![]() |
Текстовая версия | Сейчас: 18.7.2025, 17:02 |