Почему моя функция обратного вызова delta2 не вызывается? - PullRequest
1 голос
/ 23 апреля 2019

Я пытаюсь заставить мой пример devlink C ++ работать с моим AVAYA IP500, и соединение, кажется, работает нормально, функция DLOpen работает хорошо, и также вызывается функция обратного вызова, но когда я вызываю DLRegisterType2CallDeltas для получения журнала событий, он возвращает0 (DEVLINK_SUCCESS) и функция обратного вызова никогда не вызывается.

Как вы можете видеть, сообщение "Обнаружено событие" никогда не отображается в консоли, я тоже поставил точки останова в этой строке и ничего.

У меня активна лицензия CTI Pro и настроен поставщик услуг TAPI для моего компьютера

Пожалуйста, помогите.

Это код devlink.h

#ifndef _DEVLINK_H_ 
#define _DEVLINK_H_ 

typedef char TEXT;

#define DEVLINK_SUCCESS             0 
#define DEVLINK_UNSPECIFIEDFAIL     1 
#define DEVLINK_LICENCENOTFOUND     2 

#define DEVLINK_COMMS_OPERATIONAL 0 
#define DEVLINK_COMMS_NORESPONSE  1 
#define DEVLINK_COMMS_REJECTED    2 
#define DEVLINK_COMMS_MISSEDPACKETS 3 

#ifdef __cplusplus 
extern "C"
{
#endif 

    typedef void (CALLBACK * DLCALLLOGEVENT)(
        DWORD   pbxh,
        TEXT   * info
        );

    typedef void (CALLBACK * DLCOMMSEVENT)(
        DWORD   pbxh,
        DWORD    comms_state,
        DWORD    parm1
        );

    LONG  PASCAL  DLOpen(DWORD pbxh
        , TEXT * pbx_address
        , TEXT * pbx_password
        , TEXT * reserved1
        , TEXT * reserved2
        , DLCOMMSEVENT cb
    );
    LONG  PASCAL  DLClose(DWORD pbxh);

    LONG  PASCAL  DLRegisterType2CallDeltas(DWORD  pbxh, DLCALLLOGEVENT cb);

#ifdef __cplusplus 
};
#endif 

#endif // _DEVLINK_H_ 

А вот мой основной код

#include "pch.h"
#include <windows.h>
#include <stdio.h>
#include "devlink.h"

HANDLE hEvent;
DWORD dwCommsEvent;
BOOL bStarting;

void CALLBACK HandleDelta2Event(DWORD pbxh, char* switchInfo)
{
    printf("An event has been detected\n");
}

void CALLBACK HandleCommsEvent(DWORD pbxh, DWORD comms_evt, DWORD parm1)
{
    printf("event: %d - %d\n", comms_evt, parm1);
    switch (comms_evt)
    {
    case DEVLINK_COMMS_OPERATIONAL:
        // we are working fine ... fall through   
    case DEVLINK_COMMS_NORESPONSE:
        // system not found (initial connection),   
        // or network connection lost (rebooted ?)   
        // fall through ...   
    case DEVLINK_COMMS_REJECTED:
        // incorrect system password speciffied   

        if (bStarting)
        {
            dwCommsEvent = comms_evt;
            SetEvent(hEvent);
        }
        else
        {
        }
        break;

    case DEVLINK_COMMS_MISSEDPACKETS:
        // Indicates that system is under heavy load.   
        // IP Office always priorities data routing   
        // and call handling above CTI events   
        // (parm1 contains nnumber of packets missed)   
        break;
    }
}

int main(int argc, char* argv[])
{
    bool enter = false;
    long res;
    printf("connecting...");
    bStarting = TRUE;
    hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
    char swp[] = "[My IP500 IP]";
    char pw[] = "[Security user password]";
    DLOpen(0, swp, pw, NULL, NULL, HandleCommsEvent);
    dwCommsEvent = DEVLINK_COMMS_NORESPONSE;
    WaitForSingleObject(hEvent, 10000); // 10 seconds
    bStarting = FALSE;
    if (dwCommsEvent == DEVLINK_COMMS_OPERATIONAL)
    {
        printf("Connected OK\n");
        printf("Waiting for event\n");
        while (!enter)
        {
            res = DLRegisterType2CallDeltas(0, HandleDelta2Event);
            printf("Code: %d\n", res);
        }
    }
    else
    {
        printf("Error connecting to IP Office\n");
    }
    DLClose(0);
    CloseHandle(hEvent);
    return 0;
}

Мой вывод похож на следующий

connecting...event:0 - 0
event: 3 - -1
Connected OK
Waiting for event
code: 0
code: 0
code: 0
code: 0
code: 0
... keeps forever
event: 1 - 0
event: 0 - 0
event: 3 - -1
code: 0
code: 0
code: 0
code: 0
code: 0
... keeps forever
...