我打算使用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!")})