2016-11-24 7 views
0

클라이언트 서버 통신을 위해 토큰 메커니즘을 기반으로 미들웨어 서비스를 구축했습니다. 이제 DBus에서 Common API로 이식 중입니다. 우리는 토큰 메커니즘을 기반으로 프레임 워크를 유지하려고합니다. 그러나 공통 API에서는 모든 비동기 호출에 대해 콜백에서 토큰을 다시 얻지 않습니다.일반적인 API 콜백 함수에서 callinfo를 얻는 방법

내가

CommonAPI::CallStatus getAudio(int arg1, int arg 2, Callback,const CommonAPI::CallInfo) 

콜백과 같은 함수를 호출 할 유형이다 -

void Callback(const CommonAPI::CallStatus& status, int & id, int error& errorVal); 

내 질문 : 콜백에서 내가 getAudio 함수를 호출하면서 보냈다 더 CallInfo의 PARAM이 없다 . 누군가 콜백에서 callInfo를 얻는 방법에 대해 저를 도울 수 있습니까?

답변

0

토큰을 CallInfo 구조에 전달할 수 있는지 확신하지 못합니다. 어쨌든 콜백에 전달할 객체가 무엇이든간에 예를 들어 std :: function을 사용할 수 있습니다. 저는 람다 표현이 그 일을 할 수 있다고 믿습니다.

다음 예제에서는 CallInfo 객체를 전달하는 방법을 설명하지만 CommonAPI 콜백에 대해서는 모든 클래스에 적용 할 수 있습니다.

#include <functional> 
using namespace std::placeholders; 

class CallbackHelper { 
public: 
    explicit CallbackHelper(CallInfo& callinfo_) : 
    _callinfo(callinfo_) { 
    } 
    void callback(const CommonAPI::CallStatus& status, int & id, int, error& errorVal) { 
    // Do whatever with _callinfo 
    } 
private: 
    CallbackHelper() = default; 
}; 

CallInfo callInfo; 
CallbackHelper myCallback(callInfo); 

std::function<void(const CommonAPI::CallStatus& status, int & id, int, error& errorVal)> callback = std::bind(&CallbackHelper::callback, &myCallback, _1, _2, _3, _4); 

getAudio(1, 2, callback, callInfo); 

그냥 ...

콜백이 효과적으로 수행 트리거 될 때 myCallback 객체가 아직 살아 있는지 확인