AllJoyn資料傳輸過程
一、概述
AllJoyn提供Methods,signals,properties作為介面成員,AllJoyn APP可以使用這些介面成員來實現資料交換。應用之間交換資料必須建立AllJoun Session,除非是使用Sessionless來發送。
傳送方架構
接收方架構
訊息消費方通過獲得遠端物件的本地代理物件,通過呼叫本地代理物件來實現對遠端物件的操作。實現資料傳送。
二、通過方法實現資料傳送
下面的用例通過方法呼叫說明資料交換:
1、提供方傳送回覆。
2、提供方不傳送回覆。
提供方傳送回覆流程:
訊息流程如下:
1、資料的提供方和消費方連線到Alljoynrouter,執行廣播和發現步驟去發現所需服務(service)。
2、提供方APP通過AllJoyn core libary註冊服務物件,這一步需要在網路上公開服務物件到遠端節點上。AllJoyn core libary為每一個服務物件的相關方法新增一個MethodHandler。
3、資料提供方APP繫結一個回話埠通過AllJoyn core libary的BindSessionPort API,這個呼叫指定會話的埠,會話選項和一個會話sessionportlistener。
4、資料提供方和消費方APP執行Alljoyn服務廣播和發現去發現提供方提供的服務。
5、消費方建立一個與提供方一樣的AllJoyn 會話,到現在已經建立了一個會話可以使提供方和消費方來實現資料傳輸。
6、消費方通過AllJoyn core libary的GetProxyBusObjcet API建立一個proxyBusObect。消費方指定一個提供方的唯一名字,物件路徑,會話ID,和匯流排介面來使代理物件應答。
7、消費者應用程式從建立的代理物件獲取匯流排介面以及呼叫一個在匯流排介面上方法。應用程式為這個方法提供輸入引數。
8、 ProxyBusObject:MethodCall method 被呼叫,產生一個AllJoyn METHOD_CALLl訊息的呼叫方法。
9、代理物件傳送這個產生的METHOD_CALL訊息到Alljoyn 路由上。
10、AllJoyn路由接收到這個訊息,通過這條訊息中的攜帶的會話ID,目的地等資訊去確定這條訊息被路由到哪裡。這條訊息被路由到遠方的資料提供方的AllJoyn 路由上。
11、Alljoyn 路由傳送的METHOD_CALL訊息到遠方的Alljoyn路由通過建立的會話連線,這個METHOD_CALL訊息包含了序列號,服務物件路徑,介面名字,方法名字,會話ID和發件人的唯一名稱作為訊息的頭域的一部分。方法的輸入引數包括在訊息正文的一部分。
12、提供方路由接收到這條 METHOD_CALL訊息。從這條訊息包含的會話ID,目的地去確定這條訊息的路由節點,在這種情況下,資訊需要傳送到AllJoyn core libary應用程式終結點。
13、AllJoyn路由器傳送method_call訊息到 AllJoyn core libary的端點。
14、AllJoyn core libary呼叫已註冊的MethodHandler中的在接收的訊息中指定的成員方法。MethodHandler呼叫的匯流排介面的服務物件中的實際的方法,接收這個方法的回覆,為方法的回覆產生一個METHOD_RETURN訊息,傳送到 AllJoyn路由。
15、AllJoyn路由接收到這個METHOD_RETURN訊息,從這條訊息的會話ID,目的地資訊中獲得這條訊息的路由地址,在這種情況下,資訊需要傳送到AllJoyn core libary應用程式終結點。
16、提供方路由傳送這條METHOD_RETURN訊息到遠端的AllJoyn路由通過一間來的會話連線。METHOD_RETURN包含了一條回覆的資料串,會話ID,傳送方的唯一名字作為這條訊息頭的一部分,為method_return訊息的任何輸出引數被指定為訊息體部分。
17、消費方路由接收這條METHOD_RETURN訊息,從這條訊息的會話ID,目的地資訊中獲得這條訊息的路由地址,在這種情況下,資訊需要傳送到AllJoyn core libary應用程式終結點。
18、AllJoyn路由傳送這條METHOD_RETURN訊息到應用端點,這條訊息攜帶著輸出引數應答原始 METHOD_CALL訊息。
以上為Method方法的資料傳輸流程,其他signals,properties資料傳送也差不多,請參考AllJoyn的官方文件。