我打算使用PJSIP创建Swift SDK。我已经创建了XCPjsua.h文件和XCPjsua.c文件。我正在使用XCPjsua.h标头文件与XCPjsua.c文件进行交互,我有以下方法

int startPjsip(char *sipUser, char* sipDomain);


 /**
* Make VoIP call.
* @param destUri the uri of the receiver, something like "sip:192.168.43.106:5080";
*/

    2. void makeCall(char* destUri);

    3. void endCall();

从我的.swift类中,我可以导入XCPjsua.h,并且可以调用startPjsip(),makeCall(),endCall()方法。有没有一种方法可以将委托回调或通知发送到此XCPjsua.c文件中的swift类。

例如:如果收到来电,则XCPjsua.c文件将收到来电。如果要从XCPjsua.c通知swift类“您已收到来电”,我该怎么做?

最佳答案

由于您可以控制XCPjsua.[ch]中的代码,因此您甚至不必担心编写包装器:您可以通过“Swifty”方式根据需要定义回调类型和函数。

这是一个 super 简化的示例,其中回调是一个不带任何参数且不返回任何内容的函数。 Swift回调作为闭包提供给C代码。您可以做的更好(实用/现实),如果遇到问题,请告知此处的人。

XCPjsua.h中,您可以将其导入桥接头中:

// Callback type
typedef void(*call_received_cb_t)();

// A C function that monitors for incoming calls.  It takes a callback
// as a parameter and will call it when a call comes in.
void monitorIncoming(call_received_cb_t cb);
XCPjsua.c的实现:
void monitorIncoming(call_received_cb_t cb) {
    puts("Monitoring for incoming calls...");
    // Received a call!
    cb();
}

最后,这是一些Swift代码:
monitorIncoming({ print("Processing an incoming call in Swift!")})

08-07 22:47