2017-05-30 95 views
1

我打算使用PJSIP創建swift SDK。我創建了XCPjsua.h文件和XCPjsua.c文件。我使用XCPjsua.h頭文件與XCPjsua.c文件交互,我有以下方法如何發送通知或將.c文件的回調委託給swift類?

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函數(),結束呼叫() 方法。有沒有辦法將委託回調或通知從這個XCPjsua.c文件發送到swift類。

例如:如果我收到來電,XCPjsua.c文件將收到來電。從XCPjsua.c中,如果我想通知SWIFT類「您已收到來電」,我該怎麼做?

+2

HTTPS ://stackoverflow.com/a/38334529/2065045當進行呼叫發送回調,或初始時註冊註冊事件的回調 – teixeiras

回答

1

由於您可以控制XCPjsua.[ch]中的代碼,因此您甚至不必擔心編寫包裝器:您可以根據需要使用回調來定義回調類型和函數(請參閱「Swifty 「 辦法。

這是一個超級簡化的示例,其中回調函數不接受任何參數,也不返回任何內容。一個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(); 
} 

最後,這裏是一些銀行代碼:

monitorIncoming({ print("Processing an incoming call in Swift!")})