Google cam kết thúc đẩy công bằng chủng tộc cho Cộng đồng người da đen. Xem cách thực hiện.

nl::Weave::Hồ sơ::Echo_Next::WeaveEchoClient

#include <src/lib/profiles/echo/Next/WeaveEchoClient.h>

Provides the ability to send Weave EchoRequest messages to a peer node and receive
the corresponding EchoResponse messages.

Tóm tắt

Lớp WeaveEchoClient triển khai phía trình khởi tạo của giao thức Weave Echo. Tương tự như giao thức ping ICMP, giao thức Weave Echo có thể dùng để kiểm tra mức độ hoạt động và phạm vi tiếp cận của một nút Weave.

Các ứng dụng có thể dùng lớp WeaveEchoClient để gửi thông báo EchoRequest một lần hoặc lặp lại đến một nút ngang hàng do đối tượng Liên kết xác định. Lớp tương ứng tồn tại để phản hồi các yêu cầu tiếng vọng (xem WeaveEchoServer).

Liên kết ứng dụng

WeaveEchoClient lấy đối tượng Binding được dùng để xác định và thiết lập giao tiếp với người nhận mục tiêu của các yêu cầu tiếng vọng. Binding có thể được ứng dụng định cấu hình và chuẩn bị trước khi khởi tạo đối tượng WeaveEchoClient hoặc có thể chưa chuẩn bị sẵn. Trong trường hợp đó, WeaveEchoClient sẽ yêu cầu chuẩn bị theo yêu cầu liên kết (xem Binding::RequestRequest() để biết chi tiết).

Bạn cũng sẽ nhận được yêu cầu chuẩn bị Liên kết theo yêu cầu nếu không thực hiện được sau khi chuyển sang trạng thái Sẵn sàng.

Chế độ lặp lại

Bạn có thể dùng phương thức SendLặping() để đặt WeaveEchoClient vào chế độ Gửi lặp lại. Ở chế độ này, đối tượng máy khách sẽ gửi một chuỗi các thông báo EchoRequest lặp lại đến ứng dụng ngang hàng theo khoảng thời gian đã định cấu hình. Bạn có thể hủy chế độ Gửi lặp lại bằng cách gọi phương thức Stop().

Phát đa hướng và phát sóng

Đối tượng WeaveEchoClient có thể được dùng để gửi EchoRequest đến nhiều người nhận đồng thời bằng cách định cấu hình đối tượng Binding bằng địa chỉ đa hướng IPv6 hoặc địa chỉ phát sóng mạng cục bộ IPv4 (255.255.255.255). Khi phát hiện một địa chỉ ngang hàng đa hướng hoặc quảng cáo ngang hàng, đối tượng WeaveEchoClient sẽ tự động chuyển sang chế độ Đa phản hồi khi gửi EchoRequest.

Ở chế độ này, đối tượng sẽ tiếp tục theo dõi và gửi tất cả các thông báo EchoResponse đến trên cùng một nền tảng trao đổi. Đối tượng này vẫn ở chế độ MultiResponse cho đến khi: 1) ứng dụng gọi Stop() hoặc Send(), 2) ở chế độ Send tuying, thời gian để gửi một yêu cầu khác hoặc 3) không nhận được phản hồi và thời gian chờ nhận nhận hết hạn.

Sự kiện API

Trong quá trình hoạt động, đối tượng WeaveEchoClient sẽ gọi ứng dụng này để yêu cầu hành động cụ thể hoặc gửi thông báo về các sự kiện quan trọng. Những lệnh gọi sự kiện API này được thực hiện cho hàm callback hiện được định cấu hình trên đối tượng client. Trừ khi có lưu ý khác, các ứng dụng có thể thay đổi trạng thái của ứng dụng trong quá trình gọi lại sự kiện, miễn phí. Một trường hợp ngoại lệ tổng thể là phương thức Shutdown() của đối tượng, phương thức này không bao giờ có thể được gọi trong lệnh gọi lại.

Sau đây là các sự kiện API được xác định:

Giai đoạn chuẩn bị tải

WeaveEchoClient sắp tạo thông báo EchoRequest và đang yêu cầu ứng dụng cung cấp nội dung. Nếu một ứng dụng muốn, ứng dụng đó có thể trả về PacketBuffer mới chứa dữ liệu tải trọng. Nếu ứng dụng không xử lý sự kiện này, một EchoRequest có trọng tải bằng 0 sẽ được tự động gửi đi. Ứng dụng KHÔNG THỂ thay đổi trạng thái của WeaveEchoClient trong lệnh gọi lại này.

Đã gửi yêu cầu

Đã gửi một tin nhắn EchoRequest đến đồng nghiệp.

Đã nhận được phản hồi

Đã nhận được một tin nhắn tiếng vọng từ đồng nghiệp. Các đối số cho sự kiện chứa dữ liệu phản hồi và thông tin meta về thông báo phản hồi.

Lỗi kết nối

Đã xảy ra lỗi khi tạo hoặc gửi Yêu cầu EchoRequest hoặc trong khi chờ phản hồi. Ví dụ về các lỗi có thể xảy ra khi chờ phản hồi là các lỗi chính hoặc tình trạng kết nối bất ngờ. Các đối số cho sự kiện có chứa lý do lỗi.

Thời gian chờ phản hồi

Không nhận được EchoResponse trong thời gian tổng hợp. Thời gian chờ phản hồi do thuộc tính DefaultResponseSession kiểm soát trên đối tượng Binding.

Đã hủy yêu cầu

Một yêu cầu trao đổi Echo đang diễn ra đã bị hủy do bạn đã gửi yêu cầu gửi một EchoRequest khác trước khi nhận được thông báo phản hồi cho thông báo trước đó. Quá trình này có thể phát sinh trong chế độ Gửi lại khi thời gian đến để gửi Yêu cầu EchoRequest tiếp theo. Điều này cũng có thể xảy ra nếu ứng dụng gọi Send() sau khi đã gửi một EchoRequest nhưng trước khi nhận được bất kỳ phản hồi nào.

Khi đối tượng ở chế độ Đa phản hồi, sự kiện sẽ bị chặn nếu đã nhận được ít nhất một thông báo EchoResponse.

Hàm dựng và hàm phá hủy

WeaveEchoClient(void)

Loại công khai

EventCallback)(void *appState, EventType eventType, const InEventParam &inParam, OutEventParam &outParam) typedef
void(*
EventType{
  kEvent_PreparePayload = 1,
  kEvent_RequestSent = 2,
  kEvent_ResponseReceived = 3,
  kEvent_CommunicationError = 4,
  kEvent_ResponseTimeout = 5,
  kEvent_RequestAborted = 6,
  kEvent_DefaultCheck = 100
}
enum
State{
  kState_NotInitialized = 0,
  kState_Idle = 1,
  kState_PreparingBinding = 2,
  kState_RequestInProgress = 3,
  kState_WaitingToSend = 4
}
enum

Thuộc tính công khai

AppState
void *
Con trỏ đến dữ liệu dành riêng cho ứng dụng.

Hàm công khai

GetBinding(void) const
Trả về con trỏ đến đối tượng Binding được liên kết với WeaveEchoClient.
GetEventCallback(void) const
EventCallback
Trả về con trỏ đến hàm gọi lại sự kiện API hiện được định cấu hình trên đối tượng WeaveEchoClient.
GetState(void) const
Truy xuất trạng thái hiện tại của đối tượng WeaveEchoClient.
Init(Binding *binding, EventCallback eventCallback, void *appState)
Khởi tạo đối tượng WeaveEchoClient.
IsSendRrepeating() const
bool
Trả về true nếu đối tượng WeaveEchoClient hiện đang ở chế độ gửi lặp lại.
RequestInProgress() const
bool
Trả về true nếu một EchoRequest đã được gửi và đối tượng WeaveEchoClient đang chờ phản hồi.
Send(void)
Gửi tin nhắn EchoRequest cho đồng nghiệp.
Send(PacketBuffer *payloadBuf)
Gửi tin nhắn EchoRequest đến ứng dụng ngang hàng với phần nội dung cụ thể.
SendRepeating(uint32_t sendIntervalMS)
Bắt đầu gửi tuần tự lặp lại thông báo EchoRequest cho đồng nghiệp.
SetEventCallback(EventCallback eventCallback)
void
Đặt hàm gọi lại sự kiện API trên đối tượng WeaveEchoClient.
Shutdown(void)
void
Tắt đối tượng WeaveEchoClient đã khởi tạo trước đó.
Stop(void)
void
Dừng mọi quá trình trao đổi Echo đang diễn ra và hủy chế độ gửi lặp lại.

Hàm tĩnh công khai

DefaultEventHandler(void *appState, EventType eventType, const InEventParam & inParam, OutEventParam & outParam)
void
Trình xử lý mặc định cho các sự kiện API WeaveEchoClient.

Cấu trúc

nl::Weave::Hồ sơ::Echo_Next::WeaveEchoClient::InEventParam

Nhập thông số vào sự kiện API WeaveEchoClient.

nl::Weave::Hồ sơ::Echo_Next::WeaveEchoClient::OutEventParam

Thông số đầu ra cho sự kiện API WeaveEchoClient.

Loại công khai

Lệnh gọi lại sự kiện

void(* EventCallback)(void *appState, EventType eventType, const InEventParam &inParam, OutEventParam &outParam)

Loại sự kiện

 EventType
Thuộc tính
kEvent_CommunicationError

Đã xảy ra lỗi kết nối khi gửi EchoRequest hoặc đang chờ phản hồi.

kEvent_DefaultCheck

Dùng để xác minh rằng hoạt động xử lý sự kiện mặc định chính xác trong ứng dụng.

kEvent_PreparePayload

Ứng dụng được yêu cầu chuẩn bị tải trọng cho yêu cầu Echo.

kEvent_RequestAborted

Một cuộc trao đổi đang diễn ra đã bị hủy bỏ vì một yêu cầu được thực hiện để bắt đầu một cuộc trao đổi khác.

kEvent_RequestSent

Đã gửi một tin nhắn EchoRequest đến đồng nghiệp.

kEvent_ResponseReceived

Đã nhận được một tin nhắn tiếng vọng từ đồng nghiệp.

kEvent_ResponseTimeout

Không nhận được EchoResponse trong thời gian tổng hợp.

Tiểu bang

 State
Thuộc tính
kState_Idle

Đối tượng máy khách không hoạt động.

kState_NotInitialized

Đối tượng máy khách không được khởi tạo.

kState_PreparingBinding

Đối tượng máy khách đang đợi liên kết sẵn sàng.

kState_RequestInProgress

Đã gửi thông báo EchoRequest và đối tượng ứng dụng đang chờ phản hồi.

kState_WaitingToSend

sendLặping() đã được gọi và đối tượng máy khách đang đợi lần tiếp theo để gửi EchoRequest.

Thuộc tính công khai

AppState

void * AppState

Con trỏ đến dữ liệu dành riêng cho ứng dụng.

Hàm công khai

Liên kết

Binding * GetBinding(
  void
) const 

Trả về con trỏ đến đối tượng Binding được liên kết với WeaveEchoClient.

GetEventCallback

EventCallback GetEventCallback(
  void
) const 

Trả về con trỏ đến hàm gọi lại sự kiện API hiện được định cấu hình trên đối tượng WeaveEchoClient.

GetState

State GetState(
  void
) const 

Truy xuất trạng thái hiện tại của đối tượng WeaveEchoClient.

Số nguyên

WEAVE_ERROR Init(
  Binding *binding,
  EventCallback eventCallback,
  void *appState
)

Khởi tạo đối tượng WeaveEchoClient.

Khởi tạo đối tượng WeaveEchoClient để chuẩn bị gửi thông báo tiếng vọng đến ứng dụng ngang hàng.

Thông tin chi tiết
Các thông số
[in] binding
Một đối tượng Binding sẽ được dùng để thiết lập giao tiếp với nút ngang hàng.
[in] eventCallback
Con trỏ đến một hàm sẽ được đối tượng WeaveEchoClient gọi để phân phối các sự kiện API đến ứng dụng.
[in] appState
Con trỏ đến đối tượng do ứng dụng xác định sẽ được chuyển trở lại ứng dụng mỗi khi sự kiện API xảy ra.

Lặp lại

bool IsSendRrepeating() const 

Trả về true nếu đối tượng WeaveEchoClient hiện đang ở chế độ gửi lặp lại.

Đang xử lý yêu cầu

bool RequestInProgress() const 

Trả về true nếu một EchoRequest đã được gửi và đối tượng WeaveEchoClient đang chờ phản hồi.

Gửi

WEAVE_ERROR Send(
  void
)

Gửi tin nhắn EchoRequest cho đồng nghiệp.

Phương thức này bắt đầu quá trình gửi thông báo EchoRequest đến nút ngang hàng. Nếu và khi nhận được thông báo EchoResponse tương ứng, thông báo sẽ được gửi tới ứng dụng thông qua sự kiện APIRecipientd đã nhận.

Khi tạo thông báo EchoRequest, WeaveEchoClient sẽ gửi yêu cầu đến ứng dụng thông qua sự kiện API ReadyPayload để chuẩn bị tải trọng của thông báo.

Nếu đối tượng Binding không ở trạng thái Ready khi phương thức này được gọi, yêu cầu sẽ được thực hiện đối với phương thức Binding::RequestRequest() để bắt đầu chuẩn bị theo yêu cầu. Thao tác gửi sau đó sẽ được đưa vào hàng đợi cho đến khi quá trình này hoàn tất. Chiều sâu tối đa của hàng đợi này là 1. Do đó, bất kỳ lệnh gọi nào đến send() trong khi có lệnh gửi trước trong hàng đợi sẽ chỉ dẫn đến một EchoRequest được gửi.

Việc gọi Gửi() trong khi WeaveEchoClient đang ở chế độ gửi lặp lại (tức là vì lệnh gọi trước đó đến SendLặping()) có tác dụng tăng tốc và đặt lại chu kỳ gửi nhưng không lấy WeaveEchoClient khỏi chế độ gửi lặp lại.

Gửi

WEAVE_ERROR Send(
  PacketBuffer *payloadBuf
)

Gửi tin nhắn EchoRequest đến ứng dụng ngang hàng với phần nội dung cụ thể.

Phương thức này bắt đầu quá trình gửi thông báo EchoRequest đến nút ngang hàng. Nội dung của bộ đệm tải trọng được cung cấp sẽ được gửi tới ứng dụng ngang hàng dưới dạng tải trọng của thông báo EchoRequest. Nếu và khi nhận được thông báo EchoResponse tương ứng, thông báo sẽ được gửi tới ứng dụng thông qua sự kiện APIRecipientd đã nhận.

Khi gọi phương thức này, quyền sở hữu bộ đệm tải trọng đã cung cấp sẽ được chuyển cho đối tượng WeaveEchoClient để có quyền giải phóng. Điều này vẫn đúng bất kể phương thức hoàn tất thành công hay gặp lỗi.

Nếu đối tượng Binding không ở trạng thái Ready khi phương thức này được gọi, yêu cầu sẽ được thực hiện đối với phương thức Binding::RequestRequest() để bắt đầu chuẩn bị theo yêu cầu. Thao tác gửi sau đó sẽ được đưa vào hàng đợi cho đến khi quá trình này hoàn tất. Chiều sâu tối đa của hàng đợi này là 1. Do đó, bất kỳ lệnh gọi nào đến send() trong khi có lệnh gửi trước trong hàng đợi sẽ chỉ dẫn đến một EchoRequest được gửi.

Việc gọi Gửi() trong khi WeaveEchoClient đang ở chế độ gửi lặp lại (tức là vì lệnh gọi trước đó đến SendLặping()) có tác dụng tăng tốc và đặt lại chu kỳ gửi nhưng không lấy WeaveEchoClient khỏi chế độ gửi lặp lại.

Thông tin chi tiết
Các thông số
[in] payloadBuf
Một đối tượng PacketBuffer chứa dữ liệu tải trọng cần gửi cho ứng dụng ngang hàng. Quyền sở hữu bộ đệm này được chuyển vào đối tượng WeaveEchoClient trong mọi trường hợp.

Lặp lại lệnh gửi

WEAVE_ERROR SendRepeating(
  uint32_t sendIntervalMS
)

Bắt đầu gửi tuần tự lặp lại thông báo EchoRequest cho đồng nghiệp.

Phương thức này bắt đầu quá trình lặp lại khi gửi tin nhắn EchoRequest cho đồng nghiệp. Khi nhận được thông báo EchoResponse từ ứng dụng ngang hàng, chúng sẽ được gửi tới ứng dụng thông qua sự kiện ResponseResponsed API.

Khi hệ thống gọi lệnh sendLặping(), WeaveEchoClient sẽ vào chế độ gửi lặp lại, trong đó chế độ lưu sẽ được gọi cho đến khi Dừng() được gọi hoặc xảy ra lỗi Liên kết. Việc gọi SendLặping() nhiều lần có tác dụng đặt lại chu kỳ gửi và cập nhật khoảng thời gian.

Hoạt động gửi ban đầu của một trình tự xảy ra tại thời điểm SendLặping() được gọi hoặc bất cứ khi nào Binding sẵn sàng sau khi SendLặping() được gọi (xem bên dưới). Sau đó, các lần gửi tiếp theo sẽ được gửi vào khoảng thời gian chỉ định.

Mỗi khi có lần gửi, WeaveEchoClient sẽ gửi yêu cầu đến ứng dụng, thông qua sự kiện API ReadyPayload, để chuẩn bị tải trọng của thông báo.

Nếu đối tượng Binding không ở trạng thái Ready khi đã đến thời điểm gửi thông báo, thì yêu cầu sẽ được thực hiện đối với phương thức Binding::RequestRequest() để bắt đầu chuẩn bị theo yêu cầu. Các tin nhắn lặp lại sẽ được tạm dừng cho đến khi quá trình này hoàn tất. Lỗi trong quá trình chuẩn bị Liên kết theo yêu cầu sẽ khiến WeaveEchoClient rời khỏi chế độ gửi lặp lại.

Đặt lại sự kiện

void SetEventCallback(
  EventCallback eventCallback
)

Đặt hàm gọi lại sự kiện API trên đối tượng WeaveEchoClient.

Tắt

void Shutdown(
  void
)

Tắt đối tượng WeaveEchoClient đã khởi tạo trước đó.

Lưu ý rằng phương thức này chỉ có thể được gọi nếu phương thức Init() đã được gọi trước đó.

Dừng

void Stop(
  void
)

Dừng mọi quá trình trao đổi Echo đang diễn ra và hủy chế độ gửi lặp lại.

Dệt WeaveEcho

 WeaveEchoClient(
  void
)

Hàm tĩnh công khai

Trình xử lý sự kiện mặc định

void DefaultEventHandler(
  void *appState,
  EventType eventType,
  const InEventParam & inParam,
  OutEventParam & outParam
)

Trình xử lý mặc định cho các sự kiện API WeaveEchoClient.

Các ứng dụng bắt buộc phải gọi phương thức này cho bất kỳ sự kiện API nào mà chúng không nhận ra hoặc xử lý. Các thông số đã cung cấp phải giống với các thông số được đối tượng ứng dụng chuyển đến hàm xử lý sự kiện của ứng dụng.

Thông tin chi tiết
Các thông số
[in] appState
Con trỏ đến thông tin trạng thái do ứng dụng xác định liên kết với đối tượng ứng dụng.
[in] eventType
Mã sự kiện đã được gọi lại sự kiện
[in] inParam
Tham chiếu đến các thông số sự kiện đầu vào được gọi lại bằng sự kiện
[in] outParam
Tham chiếu đến các thông số sự kiện đầu ra được lệnh gọi lại sự kiện chuyển