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)
|
typedefvoid(*
|
EventType{
|
enum |
State{
|
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
|
Binding *
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:: |
Nhập thông số vào sự kiện API WeaveEchoClient. |
nl:: |
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.
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ố |
|
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ố |
|
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ố |
|