透過集合功能整理內容 你可以依據偏好儲存及分類內容。

nl::Weave::Profiles::ServiceDirectory::WeaveServiceManager

#include <src/lib/profiles/service-directory/ServiceDirectory.h>

Weave 服務目錄的管理員物件。

總結

Weave 服務管理員是 Directory 應用程式的主要介面。因此,它會隱藏與查詢服務端點相關的目錄項目上存在的複雜問題,對一或多個找到的主機名稱執行 DNS 查詢、嘗試連線、確保連線安全等等。也可以管理服務目錄資訊的快取。

建構函式和解構程式

WeaveServiceManager(void)
這個方法會初始化 WeaveServiceManager 執行個體。
~WeaveServiceManager(void)
這個方法會刪除 WeaveServiceManager 執行個體。

公開類型

@303{
  kWeave_DefaultSendTimeout = 15000
}
列舉
OnConnectBegin)(struct ServiceConnectBeginArgs &args) nl::Weave::Profiles::ServiceDirectory::WeaveServiceManager::OnConnectStart
void(*
建立連線之前,應用程式回呼。
OnServiceEndpointQueryBegin)(void) nl::Weave::Profiles::ServiceDirectory::WeaveServiceManager::OnServiceEndpointQueryStart
void(*
標記回呼,指出傳出服務目錄查詢的時間。
OnServiceEndpointQueryEndWithTimeInfo)(uint64_t timeQueryReceiptMsec, uint32_t timeProcessMsec) nl::Weave::Profiles::ServiceDirectory::WeaveServiceManager::OnServiceEndpointQueryEndWithTimeInfo
void(*
從應用程式目錄回應提供時間值的應用程式回呼。
RootDirectoryAccessor)(uint8_t *aDirectory, uint16_t aLength) nl::Weave::Profiles::ServiceDirectory::WeaveServiceManager::RootDirectoryAccessor
根目錄資訊的存取子函式。
StatusHandler)(void *anAppState, WEAVE_ERROR anError, StatusReport *aStatusReport) nl::Weave::Profiles::ServiceDirectory::WeaveServiceManager::StatusHandler
void(*
錯誤和狀態條件的處理常式。

公開函式

SetConnectBeginCallback(OnConnectBegin aConnectBegin)
void
設定可在連線建立之前立即呼叫的回呼函式。
cancel(uint64_t aServiceEp, void *aAppState)
void
此方法會取消連線要求。
clearCache(void)
void
如果狀態是在終端機 kServiceMgrState_Resolved 狀態,這個方法會清除管理員的狀態和快取,這表示系統收到來自 Service Directory 端點的回應。
connect(uint64_t aServiceEp, WeaveAuthMode aAuthMode, void *aAppState, StatusHandler aStatusHandler, WeaveConnection::ConnectionCompleteFunct aConnectionCompleteHandler, const uint32_t aConnectTimeoutMsecs, const InterfaceId aConnectIntf)
這個方法要求連結到 Weave 服務。
init(WeaveExchangeManager *aExchangeMgr, uint8_t *aCache, uint16_t aCacheLen, RootDirectoryAccessor aAccessor, WeaveAuthMode aDirAuthMode, OnServiceEndpointQueryBegin aServiceEndpointQueryBegin, OnServiceEndpointQueryEndWithTimeInfo aServiceEndpointQueryEndWithTimeInfo, OnConnectBegin aConnectBegin)
這個方法會初始化服務管理員物件。
lookup(uint64_t aServiceEp, HostPortList *outHostPortList)
這個方法會查詢服務端點的目錄資訊。
lookup(uint64_t aServiceEp, uint8_t *aControlByte, uint8_t **aDirectoryEntry)
這個方法會查詢服務端點的目錄資訊。
onConnectionClosed(WEAVE_ERROR aError)
void
這個方法會處理相關聯的 Weave 交換內容所回報的連線關閉事件。
onConnectionComplete(WEAVE_ERROR aError)
void
這個方法會處理服務端點查詢交易的連線完成事件。
onResponseReceived(uint32_t aProfileId, uint8_t aMsgType, PacketBuffer *aMsg)
void
這個方法會處理會話群組服務中與目錄服務相關的回應訊息。
onResponseTimeout(void)
void
這個方法會處理逾時事件,也就是在服務目錄中未收到回應。
relocate(WEAVE_ERROR aError)
void
這個方法會重新執行服務目錄快取。
relocate(void)
void
這個方法會重新執行服務目錄快取。
replaceOrAddCacheEntry(uint16_t port, const char *hostName, uint8_t hostLen, uint64_t serviceEndpointId)
在目錄清單的開頭加入主機名稱和通訊埠 ID 的覆寫目錄項目。
reset(WEAVE_ERROR aError)
void
這個方法會將服務管理員重設為初始狀態。
reset(void)
void
這個方法會將服務管理員重設為初始狀態。
unresolve(WEAVE_ERROR aError)
void
這個方法會使服務目錄快取失效。
unresolve(void)
void
這個方法會使服務目錄快取失效。

類別

nl::Weave::Profiles::ServiceDirectory::WeaveServiceManager::ConnectRequest

此類別代表由服務管理員管理的單一交易。

公開類型

@303

 @303
屬性
kWeave_DefaultSendTimeout

廣告交易平台內容逾時之前,對目錄查詢接收回應的毫秒數。

OnConnectStart

void(* OnConnectBegin)(struct ServiceConnectBeginArgs &args)

建立連線之前,應用程式回呼。

建立服務連線期間,應用程式可以使用這個回呼觀察及變更傳送至 #WeaveConnection::Connect() 的引數。系統會同時呼叫此回呼以連線至目標服務端點,以及執行目錄查詢時與 Service Directory 端點的連線。

OnServiceEndpointQuery 開始

void(* OnServiceEndpointQueryBegin)(void)

標記回呼,指出傳出服務目錄查詢的時間。

當我們即將傳送服務端點查詢要求時,就會呼叫這個方法。這會用來比對 OnServiceEndpointQueryEnd,以補足訊息航班時間。

OnServiceEndpointQueryEndWithTime 資訊

void(* OnServiceEndpointQueryEndWithTimeInfo)(uint64_t timeQueryReceiptMsec, uint32_t timeProcessMsec)

從應用程式目錄回應提供時間值的應用程式回呼。

當我們從服務目錄查詢回應取得時間資訊時,就會呼叫此事件。請注意,只有在成功剖析回應並包含時間資訊時,才會進行此回呼。

詳細資料
參數
[in] timeQueryReceiptMsec
POSIX 紀元時間 (從伺服器端接收查詢時經過的毫秒數)。
[in] timeProcessMsec
處理此查詢所花費的毫秒數。

RootDirectoryAccessor

WEAVE_ERROR(* RootDirectoryAccessor)(uint8_t *aDirectory, uint16_t aLength)

根目錄資訊的存取子函式。

您從這裡開始,然後利用服務目錄開始建立 stub 目錄,該目錄包含一個伺服器位址,按下後即可連上其他伺服器。由於這類資訊的處理和出處可能因裝置而異,因此我們在此提供存取者回呼。

詳細資料
參數
[out] aDirectory
指向目錄資訊的緩衝區指標,
[in] aLength
指定緩衝區的長度 (以位元組為單位)。
傳回
WEAVE_NO_ERROR,否則載入程序會遭到取消。

狀態處理常式

void(* StatusHandler)(void *anAppState, WEAVE_ERROR anError, StatusReport *aStatusReport)

錯誤和狀態條件的處理常式。

服務管理員可能會收到使用者嘗試以下列兩種方式執行連線要求的問題。服務可能會收到服務的狀態報告,或者接收內部產生的 WEAVE_ERROR。不論是哪一種情況,資訊都會透過這個回呼傳送。

詳細資料
參數
[in] anAppState
傳遞至對應 Conect() 呼叫的應用程式物件指標。
[in] anError
Weave 錯誤代碼,表示嘗試執行連線要求時發生錯誤。如果出現錯誤和可用狀態報表,則這個值應為 WEAVE_NO_ERROR
[in] aStatusReport
指向遠端目錄服務所產生的狀態報告指標。在沒有狀態報告,且先前的引數傳送內部錯誤時,此引數應為 NULL。

公開函式

SetConnectStartCallback

void SetConnectBeginCallback(
  OnConnectBegin aConnectBegin
)

設定可在連線建立之前立即呼叫的回呼函式。

詳細資料
參數
[in] aConnectBegin
回呼函式的指標。如果值為 NULL,則會停用回呼。

WeaveServiceManager

 WeaveServiceManager(
  void
)

這個方法會初始化 WeaveServiceManager 執行個體。

請注意,您必須呼叫 init() 來進一步初始化這個執行個體。

取消

void cancel(
  uint64_t aServiceEp,
  void *aAppState
)

此方法會取消連線要求。

此方法會取消連線要求,因為服務端點 ID 和要求在要求中傳遞的應用程式狀態物件做為識別碼。如果這是上次連線要求,這個方法也會一併清除任何待處理的服務目錄連線狀態。

詳細資料
參數
[in] aServiceEp
取消要求的服務端點 ID。
[in] anAppState
指向 connect() 呼叫的應用程式狀態物件的指標。

ClearCache

void clearCache(
  void
)

如果狀態是在終端機 kServiceMgrState_Resolved 狀態,這個方法會清除管理員的狀態和快取,這表示系統收到來自 Service Directory 端點的回應。

連結

WEAVE_ERROR connect(
  uint64_t aServiceEp,
  WeaveAuthMode aAuthMode,
  void *aAppState,
  StatusHandler aStatusHandler,
  WeaveConnection::ConnectionCompleteFunct aConnectionCompleteHandler,
  const uint32_t aConnectTimeoutMsecs,
  const InterfaceId aConnectIntf
)

這個方法要求連結到 Weave 服務。

這是頂層連線呼叫。基本上,它會以服務端點和驗證模式,或者是死去嘗試而為 Weave 服務建立安全連線。

只有在成功呼叫 init() 之後,才可以呼叫這個方法,而 cancel() 可能會取消連線要求。

在本機快取填充預設佈建資料或目錄服務往返資料之前,可以呼叫這個方法。服務管理員在決定快取內容之前,只會將要求排入佇列。

詳細資料
參數
[in] aServiceEp
服務端點的服務端點 ID (如 ServiceDirectory.h 中所定義)。
[in] aAuthMode
連線至相關服務時使用的驗證模式。
[in] aAppState
指向應用程式狀態物件的指標,以引數形式傳遞至回呼。
[in] aStatusHandler
連線中斷之前發生的錯誤呼叫回呼。
[in] aConnectionCompleteHandler
完成要求連線時叫用的回呼。請注意,連線可能會因為發生 Weave 錯誤代碼而失敗。
[in] aConnectTimeoutMsecs
選用的 TCP 連線逾時情況 (以毫秒為單位)。
[in] aConnectIntf
要建立連線的選用介面。
傳回
WEAVE_NO_ERROR 代表成功,否則為個別的錯誤代碼。

init

WEAVE_ERROR init(
  WeaveExchangeManager *aExchangeMgr,
  uint8_t *aCache,
  uint16_t aCacheLen,
  RootDirectoryAccessor aAccessor,
  WeaveAuthMode aDirAuthMode,
  OnServiceEndpointQueryBegin aServiceEndpointQueryBegin,
  OnServiceEndpointQueryEndWithTimeInfo aServiceEndpointQueryEndWithTimeInfo,
  OnConnectBegin aConnectBegin
)

這個方法會初始化服務管理員物件。

若要使用服務管理員物件,您必須初始化服務管理員物件。成功呼叫此方法後,用戶端便可開始呼叫 connect()lookup() 和其他方法。

詳細資料
參數
[in] aExchangeMgr
指向 Exchange 管理員,供所有服務目錄設定檔交換作業使用。
[in] aCache
指向快取快取指標,可快取目錄資訊。
[in] aCacheLen
快取的位元組長度。
[in] aAccessor
ServiceDirectory.h 中定義的回呼所叫用的回呼,以便將根目錄載入目錄查詢的起點。
[in] aDirAuthMode
與目錄服務通訊時使用的驗證模式。
[in] aServiceEndpointQueryBegin
OnServiceEndpointQueryStart 類型的函式指標,會在服務目錄要求開始時呼叫,讓應用程式程式碼可在需要使用服務目錄通訊協定所提供的時間同步時標記時間。
[in] aServiceEndpointQueryEndWithTimeInfo
OnServiceEndpointQueryEndWithTimeInfo 類型的函式指標,會在收到服務目錄時呼叫,讓應用程式使用回應中提供的時間欄位,與 Weave 服務同步。服務管理員收到含有時間資訊的回應後,就會呼叫此回呼。快取完成之後,系統應已妥善填入快取資料。
[in] aConnectBegin
OnConnectStart 類型的函式指標,會在連線建立前立即呼叫,且允許應用程式觀察及選擇性變更傳送至 #WeaveConnection::Connect() 的引數。為 NULL (預設值) 會停用回呼。
傳回
如果函式引數無效,則為 WEAVE_ERROR_INVALID_ ARGUMENT,否則為 WEAVE_NO_ERROR

lookup

WEAVE_ERROR lookup(
  uint64_t aServiceEp,
  HostPortList *outHostPortList
)

這個方法會查詢服務端點的目錄資訊。

如果服務目錄已解析完畢 (也就是成功執行 connect() 作業,那麼此方法將填入提供的 HostPortList 物件。

注意:HostPortList 繫結至 WeaveServiceManager 物件;在服務目錄快取清除,或服務完成其他目錄目錄查詢前,物件仍然有效。

詳細資料
參數
[in] aServiceEp
要查詢的服務端點 ID。
[out] outHostPortList
指向成功的目錄項目所填入的 HostPortList 指標。不得為 NULL。
傳回值
WEAVE_NO_ERROR
WEAVE_ERROR_INVALID_SERVICE_EP
找不到指定服務端點。
WEAVE_ERROR_INVALID_DIRECTORY_ENTRY_TYPE
目錄包含未知的目錄項目類型。

lookup

WEAVE_ERROR lookup(
  uint64_t aServiceEp,
  uint8_t *aControlByte,
  uint8_t **aDirectoryEntry
)

這個方法會查詢服務端點的目錄資訊。

如果服務目錄已解析完畢 (也就是成功執行 connect() 作業),那麼這個方法會傳回具有服務端點 ID 的目錄項目。

此方法會公開服務目錄內部實作的詳細資料,但使用此方法產生 HostPortList 的變化版本時,將有利於實作。

詳細資料
參數
[in] aServiceEp
要查詢的服務端點 ID。
[out] aControlByte
指向目錄項目控制位元組數的指標。
[out] aDirectoryEntry
指向目錄項目的指標指標。
傳回值
WEAVE_NO_ERROR
WEAVE_ERROR_INVALID_SERVICE_EP
找不到指定服務端點。
WEAVE_ERROR_INVALID_DIRECTORY_ENTRY_TYPE
目錄包含未知的目錄項目類型。

onConnectionClosed 已結案

void onConnectionClosed(
  WEAVE_ERROR aError
)

這個方法會處理相關聯的 Weave 交換內容所回報的連線關閉事件。

詳細資料
參數
[in] aError
Weave 錯誤指出這個連線關閉的原因。

onConnection 完成

void onConnectionComplete(
  WEAVE_ERROR aError
)

這個方法會處理服務端點查詢交易的連線完成事件。

其中有幾種可能。首先,這有可能是連線失敗,在這種情況下,我們的連線已順利完成。否則連線會確實完成,而我們應採取的就是開啟 Exchange 的結構定義並傳送目錄查詢。

詳細資料
參數
[in] aError
如果系統在連線過程中發生任何錯誤,就會發生「發生重大錯誤」。

onResponseReceived

void onResponseReceived(
  uint32_t aProfileId,
  uint8_t aMsgType,
  PacketBuffer *aMsg
)

這個方法會處理會話群組服務中與目錄服務相關的回應訊息。

詳細資料
參數
[in] aProfileId
這項訊息的設定檔 ID。
[in] aMsgType
這則訊息的設定檔專屬類型。
[in] aMsg
這則訊息的內容。

onResponseTimeout

void onResponseTimeout(
  void
)

這個方法會處理逾時事件,也就是在服務目錄中未收到回應。

重新定位

void relocate(
  WEAVE_ERROR aError
)

這個方法會重新執行服務目錄快取。

服務端點傳回狀態碼為 kStatus_Relocation 的狀態報告時,應用程式可以呼叫 unResolve() 來清除快取並取消連線要求。這個方法可於第一次呼叫 unResolve() 來簡化處理錯誤的程序;如果問題仍未解決,則呼叫 reset()

這個版本的方法適用於回溯相容性 - 擷取並記錄錯誤,然後呼叫 relocate(void)

詳細資料
參數
[in] aError
記錄錯誤。
另請參閱:
重新定位(void)

重新定位

void relocate(
  void
)

這個方法會重新執行服務目錄快取。

服務端點傳回狀態碼為 kStatus_Relocation 的狀態報告時,應用程式可以呼叫 unResolve() 來清除快取並取消連線要求。這個方法可於第一次呼叫 unResolve() 來簡化處理錯誤的程序;如果問題仍未解決,則呼叫 reset()

另請參閱:
重新定位(WEAVE_ERROR)

換貨或新增快取項目

WEAVE_ERROR replaceOrAddCacheEntry(
  uint16_t port,
  const char *hostName,
  uint8_t hostLen,
  uint64_t serviceEndpointId
)

在目錄清單的開頭加入主機名稱和通訊埠 ID 的覆寫目錄項目。

重設

void reset(
  WEAVE_ERROR aError
)

這個方法會將服務管理員重設為初始狀態。

這個方法會重設所有服務管理員狀態,包括通訊狀態、快取狀態以及任何待處理連線要求的狀態。

這個版本的方法適用於回溯相容性 - 擷取並記錄錯誤,然後呼叫 reset(void)

詳細資料
參數
[in] aError
觸發這項作業的錯誤。
另請參閱:
reset(void)

重設

void reset(
  void
)

這個方法會將服務管理員重設為初始狀態。

這個方法會重設所有服務管理員狀態,包括通訊狀態、快取狀態以及任何待處理連線要求的狀態。

另請參閱:
reset(WEAVE_ERROR)

無法解決

void unresolve(
  WEAVE_ERROR aError
)

這個方法會使服務目錄快取失效。

這個方法會設定服務目錄快取狀態,讓服務管理員在下一次請求中發出服務目錄查詢。

這個版本的方法適用於回溯相容性 - 擷取並記錄錯誤,然後呼叫 unResolve(void)

詳細資料
參數
[in] aError
觸發這項作業的錯誤。
另請參閱:
unResolve(void)

無法解決

void unresolve(
  void
)

這個方法會使服務目錄快取失效。

這個方法會設定服務目錄快取狀態,讓服務管理員在下一次請求中發出服務目錄查詢。

另請參閱:
unResolve(WEAVE_ERROR)

~WeaveServiceManager

 ~WeaveServiceManager(
  void
)

這個方法會刪除 WeaveServiceManager 執行個體。