nl::Weave::Profiles::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.

요약

WeaveEchoClient 클래스는 Weave Echo 프로토콜의 시작자 측을 구현합니다. ICMP 핑 프로토콜과 마찬가지로 Weave Echo 프로토콜을 사용하여 Weave 노드의 활성 및 도달 가능성을 테스트할 수 있습니다.

애플리케이션은 WeaveEchoClient 클래스를 사용하여 Binding 객체로 식별되는 피어 노드에 일회성 또는 반복 EchoRequest 메시지를 전송할 수 있습니다. 에코 요청에 응답하기 위해 상응하는 클래스가 존재합니다 (WeaveEchoServer 참고).

클라이언트 결합

WeaveEchoClient는 에코 요청의 의도한 수신자와 통신을 식별하고 설정하는 데 사용되는 Weave Binding 객체를 사용합니다. 결합WeaveEchoClient 객체를 초기화하기 전에 애플리케이션에서 구성하고 준비할 수 있습니다. 또는 준비되지 않은 상태로 둘 수도 있습니다. 이 경우 WeaveEchoClient는 주문형 결합 준비를 요청합니다. 자세한 내용은 Binding::RequestPrepare()를 참조하세요.

준비 상태에 진입한 후 실패하면 Binding의 주문형 준비가 요청됩니다.

반복 모드 보내기

SendRepeating() 메서드를 사용하여 WeaveEchoClient를 SendRepeating 모드로 전환할 수 있습니다. 이 모드에서 클라이언트 객체는 일련의 EchoRequest 메시지를 구성된 간격으로 피어에 전송합니다. SendRepeating 모드는 Stop() 메서드를 호출하여 취소할 수 있습니다.

멀티캐스트 및 브로드캐스트

WeaveEchoClient 객체는 적절한 IPv6 멀티캐스트 주소 또는 IPv4 로컬 네트워크 브로드캐스트 주소 (255.255.255.255)로 Binding 객체를 구성하여 여러 수신자에게 동시에 EchoRequest를 전송하는 데 사용할 수 있습니다. WeaveEchoClient 객체가 멀티캐스트 또는 브로드캐스트 피어 주소를 감지하면 EchoRequest가 전송될 때 자동으로 다중 응답 모드로 전환됩니다.

이 모드에서 객체는 동일한 교환에 도착한 모든 수신 EchoResponse 메시지를 계속 수신 대기하고 전달합니다. 객체는 1) 애플리케이션이 Stop() 또는 Send()를 호출하거나, 2) SendRepeating 모드에서, 다른 요청을 전송할 시점이 되거나, 3) 응답이 수신되지 않고 수신 제한시간이 만료될 때까지 다중 응답 모드로 유지됩니다.

API 이벤트

작업 도중 WeaveEchoClient 객체는 애플리케이션을 호출하여 특정 작업을 요청하거나 중요한 이벤트의 알림을 전달합니다. 다음 API 이벤트는 클라이언트 객체에서 현재 구성된 콜백 함수에 대해 수행됩니다. 명시된 경우를 제외하고 애플리케이션은 이벤트 콜백 중에 클라이언트의 상태를 자유롭게 변경할 수 있습니다. 한 가지 전반적인 예외는 객체의 Shutdown() 메서드로, 콜백 중에 호출되지 않을 수 있습니다.

다음과 같은 API 이벤트가 정의됩니다.

PreparePayload

WeaveEchoClient가 EchoRequest 메시지를 작성하려고 하며 애플리케이션에 페이로드를 제공하도록 요청합니다. 애플리케이션이 원하는 경우 페이로드 데이터를 포함하는 새 PacketBuffer를 반환할 수 있습니다. 애플리케이션이 이 이벤트를 처리하지 않으면 길이가 0인 페이로드의 EchoRequest가 자동으로 전송됩니다. 애플리케이션은 이 콜백 중에 WeaveEchoClient의 상태를 변경하면 안 됩니다(MAY NOT).

RequestSent

EchoRequest 메시지가 피어에 전송되었습니다.

ResponseReceived

피어로부터 EchoResponse 메시지가 수신되었습니다. 이벤트의 인수에는 응답 페이로드와 응답 메시지에 대한 메타 정보가 포함됩니다.

CommunicationError

EchoRequest를 작성 또는 보내는 동안 또는 응답을 기다리는 동안 오류가 발생했습니다. 응답을 기다리는 동안 발생할 수 있는 오류의 예로는 키 오류 또는 예기치 않은 연결 종료가 있습니다. 이벤트의 인수에는 오류 이유가 포함됩니다.

ResponseTimeout

할당된 시간 내에 EchoResponse가 수신되지 않았습니다. 응답 제한 시간은 Binding 객체의 DefaultResponseTimeout 속성으로 제어됩니다.

RequestAborted

이전 메시지에 대한 응답이 수신되기 전에 다른 EchoRequest를 전송하라는 요청이 전송되어 진행 중인 에코 교환이 취소되었습니다. 이는 다음 EchoRequest를 보낼 시간이 도착하면 SendRepeating 모드에서 발생할 수 있습니다. EchoRequest가 전송된 후 응답을 수신하기 전에 애플리케이션에서 Send()를 호출하는 경우에도 이러한 상황이 발생할 수 있습니다.

객체가 다중 응답 모드인 경우 EchoResponse 메시지가 하나 이상 수신되면 이벤트가 억제됩니다.

생성자 및 소멸자

WeaveEchoClient(void)

공개 유형

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

공개 속성

AppState
void *
애플리케이션별 데이터를 가리키는 포인터입니다.

공개 함수

GetBinding(void) const
WeaveEchoClient와 연결된 Binding 객체에 대한 포인터를 반환합니다.
GetEventCallback(void) const
EventCallback
현재 WeaveEchoClient 객체에 구성된 API 이벤트 콜백 함수에 대한 포인터를 반환합니다.
GetState(void) const
WeaveEchoClient 객체의 현재 상태를 검색합니다.
Init(Binding *binding, EventCallback eventCallback, void *appState)
WeaveEchoClient 객체를 초기화합니다.
IsSendRrepeating() const
bool
WeaveEchoClient 객체가 현재 전송 반복 모드인 경우 true를 반환합니다.
RequestInProgress() const
bool
EchoRequest가 전송되었고 WeaveEchoClient 객체가 응답을 기다리고 있으면 true를 반환합니다.
Send(void)
피어에게 EchoRequest 메시지를 보냅니다.
Send(PacketBuffer *payloadBuf)
특정 페이로드가 포함된 피어에 EchoRequest 메시지를 보냅니다.
SendRepeating(uint32_t sendIntervalMS)
EchoRequest 메시지의 반복 시퀀스를 피어에 보내기 시작합니다.
SetEventCallback(EventCallback eventCallback)
void
WeaveEchoClient 객체에 API 이벤트 콜백 함수를 설정합니다.
Shutdown(void)
void
이전에 초기화된 WeaveEchoClient 객체를 종료합니다.
Stop(void)
void
진행 중인 에코 교환을 중지하고 전송 반복 모드를 취소합니다.

공개 정적 함수

DefaultEventHandler(void *appState, EventType eventType, const InEventParam & inParam, OutEventParam & outParam)
void
WeaveEchoClient API 이벤트의 기본 핸들러입니다.

구조체

nl::Weave::Profiles::Echo_Next::WeaveEchoClient::InEventParam

WeaveEchoClient API 이벤트에 대한 입력 매개변수입니다.

nl::Weave::Profiles::Echo_Next::WeaveEchoClient::OutEventParam

WeaveEchoClient API 이벤트에 매개변수를 출력합니다.

공개 유형

EventCallback

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

EventType

 EventType
속성
kEvent_CommunicationError

EchoRequest를 전송하거나 응답을 기다리는 동안 통신 오류가 발생했습니다.

kEvent_DefaultCheck

애플리케이션에서 올바른 기본 이벤트 처리를 확인하는 데 사용됩니다.

kEvent_PreparePayload

에코 요청을 위한 페이로드를 준비하도록 애플리케이션이 요청됩니다.

kEvent_RequestAborted

다른 교환을 시작하라는 요청이 전송되어 진행 중인 에코 교환이 취소되었습니다.

kEvent_RequestSent

EchoRequest 메시지가 피어에 전송되었습니다.

kEvent_ResponseReceived

피어로부터 EchoResponse 메시지가 수신되었습니다.

kEvent_ResponseTimeout

할당된 시간 내에 EchoResponse가 수신되지 않았습니다.

상태

 State
속성
kState_Idle

클라이언트 객체가 유휴 상태입니다.

kState_NotInitialized

클라이언트 객체가 초기화되지 않았습니다.

kState_PreparingBinding

클라이언트 객체가 결합이 준비될 때까지 대기합니다.

kState_RequestInProgress

EchoRequest 메시지가 전송되었으며 클라이언트 객체가 응답을 기다리고 있습니다.

kState_WaitingToSend

SendRepeating()이 호출되었고 클라이언트 객체가 다음에 EchoRequest를 보낼 때까지 대기 중입니다.

공개 속성

AppState

void * AppState

애플리케이션별 데이터를 가리키는 포인터입니다.

공개 함수

GetBinding

Binding * GetBinding(
  void
) const 

WeaveEchoClient와 연결된 Binding 객체에 대한 포인터를 반환합니다.

GetEventCallback

EventCallback GetEventCallback(
  void
) const 

현재 WeaveEchoClient 객체에 구성된 API 이벤트 콜백 함수에 대한 포인터를 반환합니다.

GetState

State GetState(
  void
) const 

WeaveEchoClient 객체의 현재 상태를 검색합니다.

Init

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

WeaveEchoClient 객체를 초기화합니다.

에코 메시지를 피어에 전송하기 위해 WeaveEchoClient 객체를 초기화합니다.

세부정보
매개변수
[in] binding
피어 노드와의 통신을 설정하는 데 사용될 Binding 객체입니다.
[in] eventCallback
API 이벤트를 애플리케이션에 전달하기 위해 WeaveEchoClient 객체가 호출할 함수에 대한 포인터입니다.
[in] appState
API 이벤트가 발생할 때마다 애플리케이션에 다시 전달될 애플리케이션 정의 객체에 대한 포인터입니다.

IsSendRrepeating

bool IsSendRrepeating() const 

WeaveEchoClient 객체가 현재 전송 반복 모드인 경우 true를 반환합니다.

RequestInProgress

bool RequestInProgress() const 

EchoRequest가 전송되었고 WeaveEchoClient 객체가 응답을 기다리고 있으면 true를 반환합니다.

보내기

WEAVE_ERROR Send(
  void
)

피어에게 EchoRequest 메시지를 보냅니다.

이 메서드는 피어 노드에 EchoRequest 메시지를 보내는 프로세스를 시작합니다. 해당 EchoResponse 메시지가 수신되면 ResponseReceived API 이벤트를 통해 애플리케이션에 전달됩니다.

EchoRequest 메시지를 작성할 때 WeaveEchoClient는 Prepare페이 API 이벤트를 통해 애플리케이션에 요청을 보내 메시지의 페이로드를 준비합니다.

이 메서드가 호출될 때 Binding 객체가 Ready 상태가 아니면 Binding::RequestPrepare() 메서드에 요청하여 주문형 준비를 시작합니다. 그러면 이 프로세스가 완료될 때까지 보내기 작업이 큐에 추가됩니다. 이 큐의 최대 깊이는 1입니다. 따라서 대기열에 이전 전송 항목이 있는 동안 Send()를 호출하면 하나의 EchoRequest만 전송됩니다.

WeaveEchoClient가 전송 반복 모드에 있는 동안(예: SendRepeating()에 대한 이전 호출로 인해) Send()를 호출하면 전송 주기를 가속화하고 재설정하지만 전송 반복 모드에서 WeaveEchoClient가 삭제되지는 않습니다.

보내기

WEAVE_ERROR Send(
  PacketBuffer *payloadBuf
)

특정 페이로드가 포함된 피어에 EchoRequest 메시지를 보냅니다.

이 메서드는 피어 노드에 EchoRequest 메시지를 보내는 프로세스를 시작합니다. 제공된 페이로드 버퍼의 콘텐츠는 EchoRequest 메시지의 페이로드로 피어에 전송됩니다. 해당 EchoResponse 메시지가 수신되면 ResponseReceived API 이벤트를 통해 애플리케이션에 전달됩니다.

이 메서드를 호출하면 제공된 페이로드 버퍼의 소유권이 WeaveEchoClient 객체로 전달되고 이 객체는 이를 해제해야 합니다. 이는 메서드가 성공적으로 완료되었는지 또는 오류가 발생했는지와 관계없이 true입니다.

이 메서드가 호출될 때 Binding 객체가 Ready 상태가 아니면 Binding::RequestPrepare() 메서드에 요청하여 주문형 준비를 시작합니다. 그러면 이 프로세스가 완료될 때까지 보내기 작업이 큐에 추가됩니다. 이 큐의 최대 깊이는 1입니다. 따라서 대기열에 이전 전송 항목이 있는 동안 Send()를 호출하면 하나의 EchoRequest만 전송됩니다.

WeaveEchoClient가 전송 반복 모드에 있는 동안(예: SendRepeating()에 대한 이전 호출로 인해) Send()를 호출하면 전송 주기를 가속화하고 재설정하지만 전송 반복 모드에서 WeaveEchoClient가 삭제되지는 않습니다.

세부정보
매개변수
[in] payloadBuf
피어로 전송할 페이로드 데이터를 포함하는 PacketBuffer 객체입니다. 이 버퍼의 소유권은 모든 경우에 WeaveEchoClient 객체로 전달됩니다.

SendRepeating

WEAVE_ERROR SendRepeating(
  uint32_t sendIntervalMS
)

EchoRequest 메시지의 반복 시퀀스를 피어에 보내기 시작합니다.

이 메서드는 피어에게 EchoRequest 메시지를 보내는 반복 프로세스를 시작합니다. EchoResponse 메시지가 피어에서 수신되면 ResponseReceived API 이벤트를 통해 애플리케이션으로 전송됩니다.

SendRepeating()을 호출하면 WeaveEchoClient는 전송 반복 모드로 전환되며 Stop()이 호출되거나 Binding 오류가 발생할 때까지 그대로 유지됩니다. SendRepeating()을 여러 번 호출하면 전송 주기를 재설정하고 간격을 업데이트하는 효과가 있습니다.

시퀀스의 초기 전송은 SendRepeating()이 호출될 때 또는 SendRepeating()이 호출된 후 Binding이 준비될 때마다 발생합니다 (아래 참조). 이후 지정된 간격으로 후속 전송이 이루어집니다.

전송할 때마다 WeaveEchoClient는 Prepare페이 API 이벤트를 통해 애플리케이션에 요청을 보내 메시지의 페이로드를 준비합니다.

메시지를 보낼 때 Binding 객체가 준비 상태가 아니면 Binding::RequestPrepare() 메서드에 요청하여 주문형 준비를 시작합니다. 이 프로세스가 완료될 때까지 반복된 메일 전송이 일시중지됩니다. 주문형 결합 준비 도중에 실패하면 WeaveEchoClient가 전송 반복 모드에서 나가게 됩니다.

SetEventCallback

void SetEventCallback(
  EventCallback eventCallback
)

WeaveEchoClient 객체에 API 이벤트 콜백 함수를 설정합니다.

종료

void Shutdown(
  void
)

이전에 초기화된 WeaveEchoClient 객체를 종료합니다.

이 메서드는 Init() 메서드를 이전에 호출한 경우에만 호출할 수 있습니다.

중지

void Stop(
  void
)

진행 중인 에코 교환을 중지하고 전송 반복 모드를 취소합니다.

WeaveEchoClient

 WeaveEchoClient(
  void
)

공개 정적 함수

DefaultEventHandler

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

WeaveEchoClient API 이벤트의 기본 핸들러입니다.

애플리케이션에서 인식하지 못하거나 처리하지 않는 모든 API 이벤트에 대해 이 메서드를 호출해야 합니다. 제공된 매개변수는 클라이언트 객체가 애플리케이션의 이벤트 핸들러 함수에 전달하는 매개변수와 동일해야 합니다.

세부정보
매개변수
[in] appState
클라이언트 객체와 연결된 애플리케이션 정의 상태 정보에 대한 포인터입니다.
[in] eventType
이벤트 콜백에서 전달한 이벤트 ID
[in] inParam
이벤트 콜백에서 전달한 입력 이벤트 매개변수 참조
[in] outParam
이벤트 콜백에서 전달한 출력 이벤트 매개변수 참조