จัดทุกอย่างให้เป็นระเบียบอยู่เสมอด้วยคอลเล็กชัน บันทึกและจัดหมวดหมู่เนื้อหาตามค่ากำหนดของคุณ

nl::Weave::โปรไฟล์::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 คุณสามารถใช้โปรโตคอล Weave Echo เพื่อทดสอบความพร้อมใช้งานและความสามารถในการเข้าถึงของโหนด Weave ได้คล้ายกับโปรโตคอล ping ของ ICMP

แอปพลิเคชันจะใช้คลาส WeaveEchoClient เพื่อส่งข้อความ EchoRequest แบบครั้งเดียวหรือแบบทําซ้ําไปยังโหนดเพียร์ที่ระบุโดยออบเจ็กต์ Binding มีคลาสที่เกี่ยวข้องเพื่อตอบสนองต่อคําขอเสียงสะท้อน (โปรดดู WeaveEchoServer)

การเชื่อมโยงไคลเอ็นต์

WeaveEchoClient ใช้ออบเจ็กต์การเชื่อมโยงแบบ Weave ที่ใช้เพื่อระบุและสร้างการสื่อสารกับผู้รับที่ต้องการในการสะท้อนเสียง แอปพลิเคชันจะกําหนดค่าและจัดเตรียม Binding ได้ก่อนที่แอปพลิเคชันจะเริ่มต้นก่อนที่ออบเจ็กต์ WeaveEchoClient จะจัดเตรียมได้ หรือเตรียมการไม่พร้อม ซึ่งในกรณีนี้ WeaveEchoClient จะขอการเตรียมพร้อมตามคําขอการเชื่อมโยง (ดูรายละเอียดได้ที่ Binding::Requestเตรียมพร้อม())

ระบบจะขอเตรียมการเชื่อมโยงแบบออนดีมานด์ด้วยหากไม่สามารถเข้าสู่สถานะพร้อมใช้งาน

โหมดการส่งซ้ํา

คุณใช้เมธอด SendSending() เพื่อนํา WeaveEchoClient เข้าสู่โหมด SendSending ได้ ในโหมดนี้ ออบเจ็กต์ไคลเอ็นต์จะส่งลําดับข้อความ EchoRequest ซ้ําไปยังเพียร์ในช่วงเวลาที่กําหนดค่าไว้ โหมด "ส่งซ้ํา" จะยกเลิกได้โดยเรียกเมธอด Stop()

มัลติแคสต์และการออกอากาศ

คุณสามารถใช้ออบเจ็กต์ WeaveEchoClient เพื่อส่ง EchoRequests ไปยังผู้รับหลายรายได้ในคราวเดียว โดยกําหนดค่าออบเจ็กต์ Binding ด้วยที่อยู่ IPv6 มัลติแคสต์ที่เหมาะสม หรือที่อยู่การออกอากาศเครือข่าย IPv4 ภายใน (255.255.255.255) เมื่อออบเจ็กต์ WeaveEchoClient ตรวจพบที่อยู่การเชื่อมต่อแบบมัลติแคสต์หรือเพียร์ ออบเจ็กต์จะเข้าสู่โหมด MultiResponse โดยอัตโนมัติเมื่อส่ง EchoRequest

ในโหมดนี้ ออบเจ็กต์จะยังคงฟังและส่งข้อความ EchoResponse ทั้งหมดที่เข้ามาที่ Exchange เดียวกัน ออบเจ็กต์ดังกล่าวจะยังคงอยู่ในโหมด MultiResponse จนถึง 1) แอปพลิเคชันเรียกใช้ Stop() หรือ Send() 2) ในโหมด SendSending เวลาจะส่งคําขออื่น หรือ 3) ไม่ได้รับการตอบกลับ และหมดเวลาการรับ

เหตุการณ์ API

ในระหว่างการทํางาน ออบเจ็กต์ WeaveEchoClient จะเรียกใช้แอปพลิเคชันเพื่อขอการดําเนินการที่เฉพาะเจาะจงหรือส่งการแจ้งเตือนเหตุการณ์สําคัญ การเรียกเหตุการณ์ API เหล่านี้ทํากับฟังก์ชันเรียกกลับที่กําหนดค่าไว้ในปัจจุบันในออบเจ็กต์ไคลเอ็นต์ แอปพลิเคชันจะแก้ไขสถานะของไคลเอ็นต์ระหว่างโค้ดเรียกกลับของกิจกรรมได้ ยกเว้นในกรณีที่มีหมายเหตุไว้ ข้อยกเว้นโดยรวมอย่างหนึ่งคือเมธอด Shutdown() ของออบเจ็กต์ ซึ่งอาจเรียกใช้ไม่ได้ระหว่างการเรียกกลับ

ระบบจะกําหนดเหตุการณ์ API ต่อไปนี้

LoadPayload

WeaveEchoClient กําลังจะสร้างข้อความ EchoRequest และร้องขอให้แอปพลิเคชันมีเพย์โหลด หากแอปพลิเคชันต้องการ แอปพลิเคชันอาจส่งคืน PacketBuffer ใหม่ที่มีข้อมูลเพย์โหลด หากแอปพลิเคชันไม่จัดการเหตุการณ์นี้ ระบบจะส่ง EchoRequest ที่มีเพย์โหลดความยาว 0 รายการโดยอัตโนมัติ แอปพลิเคชันอาจไม่ได้เปลี่ยนแปลงสถานะของ WeaveEchoClient ระหว่างโค้ดเรียกกลับนี้

ส่งคําขอแล้ว

ส่งข้อความ EchoRequest ไปยังแอปเทียบเท่าแล้ว

ได้รับการตอบสนองแล้ว

ได้รับข้อความ EchoResponse จากเพื่อน อาร์กิวเมนต์ในเหตุการณ์ประกอบด้วยเพย์โหลดการตอบกลับและข้อมูลเมตาเกี่ยวกับข้อความตอบกลับ

ข้อผิดพลาดในการสื่อสาร

เกิดข้อผิดพลาดขณะสร้างหรือส่ง EchoRequest หรือขณะรอการตอบกลับ ตัวอย่างข้อผิดพลาดที่อาจเกิดขึ้นขณะรอการตอบกลับ ได้แก่ ข้อผิดพลาดหลักหรือการเชื่อมต่อที่ไม่คาดคิด อาร์กิวเมนต์ที่เหตุการณ์มีเหตุผลข้อผิดพลาด

หมดเวลาตอบกลับ

ไม่ได้รับ EchoResponse ในเวลาที่ระบุ ระยะหมดเวลาเริ่มต้นจะควบคุมโดยพร็อพเพอร์ตี้ DefaultResponseTimeout ในออบเจ็กต์ Binding

ล้มเลิกคําขอแล้ว

ระบบแลกเปลี่ยนการแลกเปลี่ยน Echo ที่ดําเนินการอยู่เนื่องจากมีการส่งคําขอเพื่อส่งคําขอ EchoRequest อีกรายการก่อนได้รับข้อความก่อนหน้า ปัญหานี้อาจเกิดขึ้นในโหมด SendSending เมื่อถึงเวลาที่กําหนดในการส่ง EchoRequest ถัดไป ซึ่งอาจเกิดขึ้นได้หากแอปพลิเคชันเรียกใช้ Send() หลังจากส่ง EchoRequest แล้ว แต่ก่อนที่จะได้รับการตอบกลับ

เมื่อออบเจ็กต์อยู่ในโหมด MultiResponse ระบบจะระงับเหตุการณ์หากได้รับข้อความ EchoResponse อย่างน้อย 1 รายการ

เครื่องมือสร้างและตัวสร้าง

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
แสดงตัวชี้ไปยังออบเจ็กต์ Binding ที่เชื่อมโยงกับ WeaveEchoClient
GetEventCallback(void) const
EventCallback
แสดงตัวชี้ไปยังฟังก์ชันเรียกกลับเหตุการณ์ API ที่กําหนดค่าไว้ในออบเจ็กต์ WeaveEchoClient ในขณะนี้
GetState(void) const
เรียกสถานะปัจจุบันของออบเจ็กต์ WeaveEchoClient
Init(Binding *binding, EventCallback eventCallback, void *appState)
เริ่มต้นออบเจ็กต์ WeaveEchoClient
IsSendRrepeating() const
bool
แสดงผลเป็น "จริง" หากออบเจ็กต์ WeaveEchoClient อยู่ในโหมดทําซ้ําการส่ง
RequestInProgress() const
bool
แสดงผลเป็น "จริง" หากมีการส่ง EchoRequest และออบเจ็กต์ WeaveEchoClient กําลังรอการตอบสนอง
Send(void)
ส่งข้อความ EchoRequest ไปยังเพื่อน
Send(PacketBuffer *payloadBuf)
ส่งข้อความ EchoRequest ไปยังแอปเทียบเท่าด้วยเพย์โหลดที่เฉพาะเจาะจง
SendRepeating(uint32_t sendIntervalMS)
เริ่มส่งการส่งข้อความ EchoRequest ไปยังเพียร์อย่างต่อเนื่อง
SetEventCallback(EventCallback eventCallback)
void
ตั้งค่าฟังก์ชันเรียกกลับของเหตุการณ์ API ในออบเจ็กต์ WeaveEchoClient
Shutdown(void)
void
ปิดออบเจ็กต์ WeaveEchoClient ที่เริ่มต้นไว้ก่อนหน้านี้
Stop(void)
void
หยุดการแลกเปลี่ยน Echo ที่กําลังดําเนินการและยกเลิกโหมดส่งซ้ํา

ฟังก์ชันสาธารณะแบบคงที่

DefaultEventHandler(void *appState, EventType eventType, const InEventParam & inParam, OutEventParam & outParam)
void
เครื่องจัดการเริ่มต้นสําหรับเหตุการณ์ API ของ WeaveEchoClient

โครงสร้าง

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

ป้อนพารามิเตอร์ไปยังเหตุการณ์ API ของ WeaveEchoClient

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

พารามิเตอร์เอาต์พุตไปยังเหตุการณ์ API ของ WeaveEchoClient

ประเภทสาธารณะ

เรียกกลับเหตุการณ์

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

ประเภทเหตุการณ์

 EventType
พร็อพเพอร์ตี้
kEvent_CommunicationError

เกิดข้อผิดพลาดด้านการสื่อสารขณะส่ง EchoRequest หรือกําลังรอการตอบกลับ

kEvent_DefaultCheck

ใช้เพื่อยืนยันการจัดการเหตุการณ์เริ่มต้นที่ถูกต้องในแอปพลิเคชัน

kEvent_PreparePayload

แอปพลิเคชันนี้ต้องการให้เตรียมเพย์โหลดสําหรับคําขอที่มีเสียงสะท้อน

kEvent_RequestAborted

ระบบยกเลิกการแลกเปลี่ยน Echo ที่อยู่ระหว่างดําเนินการแล้วเนื่องจากมีการส่งคําขอเพื่อเริ่มการแลกเปลี่ยนอื่น

kEvent_RequestSent

ส่งข้อความ EchoRequest ไปยังแอปเทียบเท่าแล้ว

kEvent_ResponseReceived

ได้รับข้อความ EchoResponse จากเพื่อน

kEvent_ResponseTimeout

ไม่ได้รับ EchoResponse ในเวลาที่ระบุ

สถานะ

 State
พร็อพเพอร์ตี้
kState_Idle

ออบเจ็กต์ไคลเอ็นต์ไม่มีการใช้งาน

kState_NotInitialized

ออบเจ็กต์ไคลเอ็นต์ไม่ได้เริ่มต้น

kState_PreparingBinding

ออบเจ็กต์ไคลเอ็นต์กําลังรอให้การเชื่อมโยงพร้อมใช้งาน

kState_RequestInProgress

ส่งข้อความ EchoRequest และออบเจ็กต์ไคลเอ็นต์กําลังรอการตอบกลับ

kState_WaitingToSend

มีการเรียก SendSending() และออบเจ็กต์ไคลเอ็นต์กําลังรอการส่ง EchoRequest ในครั้งถัดไป

แอตทริบิวต์สาธารณะ

สถานะแอป

void * AppState

ตัวชี้ไปยังข้อมูลเฉพาะแอปพลิเคชัน

ฟังก์ชันสาธารณะ

ดาวน์โหลด Get-inding

Binding * GetBinding(
  void
) const 

แสดงตัวชี้ไปยังออบเจ็กต์ Binding ที่เชื่อมโยงกับ WeaveEchoClient

เรียกกลับเหตุการณ์

EventCallback GetEventCallback(
  void
) const 

แสดงตัวชี้ไปยังฟังก์ชันเรียกกลับเหตุการณ์ API ที่กําหนดค่าไว้ในออบเจ็กต์ WeaveEchoClient ในขณะนี้

รับสถานะ

State GetState(
  void
) const 

เรียกสถานะปัจจุบันของออบเจ็กต์ WeaveEchoClient

เริ่ม

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

เริ่มต้นออบเจ็กต์ WeaveEchoClient

เริ่มต้นออบเจ็กต์ WeaveEchoClient เพื่อเตรียมพร้อมสําหรับการส่งข้อความสะท้อนไปยังแอปเทียบเท่า

รายละเอียด
พารามิเตอร์
[in] binding
ออบเจ็กต์การเชื่อมโยงที่จะใช้เพื่อสร้างการสื่อสารกับโหนดเพียร์
[in] eventCallback
ตัวชี้ไปยังฟังก์ชันที่จะเรียกใช้โดยออบเจ็กต์ WeaveEchoClient เพื่อส่งเหตุการณ์ API ไปยังแอปพลิเคชัน
[in] appState
ตัวชี้ไปยังออบเจ็กต์ที่แอปพลิเคชันกําหนด ซึ่งจะส่งกลับไปยังแอปพลิเคชันเมื่อมีเหตุการณ์ API เกิดขึ้น

กําลังส่งซ้ํา

bool IsSendRrepeating() const 

แสดงผลเป็น "จริง" หากออบเจ็กต์ WeaveEchoClient อยู่ในโหมดทําซ้ําการส่ง

กําลังดําเนินการคําขอ

bool RequestInProgress() const 

แสดงผลเป็น "จริง" หากมีการส่ง EchoRequest และออบเจ็กต์ WeaveEchoClient กําลังรอการตอบสนอง

ส่ง

WEAVE_ERROR Send(
  void
)

ส่งข้อความ EchoRequest ไปยังเพื่อน

การดําเนินการนี้จะเริ่มต้นกระบวนการส่งข้อความ EchoRequest ไปยังโหนดเพียร์ หากได้รับข้อความ EchoResponse ที่เกี่ยวข้องแล้ว ข้อความนั้นจะถูกส่งไปที่แอปพลิเคชันผ่านเหตุการณ์ ResponseReceived API

เมื่อสร้างข้อความ EchoRequest WeaveEchoClient จะส่งคําขอไปยังแอปพลิเคชันผ่านเหตุการณ์ เตรียมพร้อมPayAPI API เพื่อเตรียมเพย์โหลดของข้อความ

หากออบเจ็กต์ การเชื่อมโยง ไม่อยู่ในสถานะพร้อมเมื่อมีการเรียกใช้เมธอดนี้ ระบบจะส่งคําขอไปยังวิธีการทําข้อตกลงผูกพัน (Requestin()) เพื่อเริ่มการเตรียมการตามคําขอ จากนั้นระบบจะดําเนินการคิวการส่งจนกว่าขั้นตอนนี้จะเสร็จสมบูรณ์ ความลึกสูงสุดของคิวนี้คือ 1 รายการ ดังนั้น การเรียก Send() เมื่อมีการส่งข้อความก่อนหน้านี้ในคิวจะส่งผลให้มีการส่ง EchoRequest เพียงครั้งเดียวเท่านั้น

การเรียกใช้ Send() ขณะที่ WeaveEchoClient อยู่ในโหมดส่งซ้ํา (เนื่องจากการเรียกไปยัง SendSending() ก่อนหน้านี้) มีผลในการเร่งและรีเซ็ตรอบการส่ง แต่ไม่ได้ทําให้ WeaveEchoClient ออกจากโหมดการส่งซ้ํา

ส่ง

WEAVE_ERROR Send(
  PacketBuffer *payloadBuf
)

ส่งข้อความ EchoRequest ไปยังแอปเทียบเท่าด้วยเพย์โหลดที่เฉพาะเจาะจง

การดําเนินการนี้จะเริ่มต้นกระบวนการส่งข้อความ EchoRequest ไปยังโหนดเพียร์ ระบบจะส่งเนื้อหาของบัฟเฟอร์เพย์โหลดที่ระบุไปยังแอปเทียบเท่าเป็นเพย์โหลดของข้อความ EchoRequest หากได้รับข้อความ EchoResponse ที่เกี่ยวข้องแล้ว ข้อความนั้นจะถูกส่งไปที่แอปพลิเคชันผ่านเหตุการณ์ ResponseReceived API

เมื่อเรียกใช้เมธอดนี้ ความเป็นเจ้าของบัฟเฟอร์เพย์โหลดที่ระบุจะส่งไปยังออบเจ็กต์ WeaveEchoClient ซึ่งมีหน้าที่รับผิดชอบในการเพิ่มพื้นที่ว่าง กรณีนี้เกิดขึ้นได้ไม่ว่าวิธีการจะสําเร็จหรือมีข้อผิดพลาด

หากออบเจ็กต์ การเชื่อมโยง ไม่อยู่ในสถานะพร้อมเมื่อมีการเรียกใช้เมธอดนี้ ระบบจะส่งคําขอไปยังวิธีการทําข้อตกลงผูกพัน (Requestin()) เพื่อเริ่มการเตรียมการตามคําขอ จากนั้นระบบจะดําเนินการจัดคิวการส่งจนกว่ากระบวนการนี้จะเสร็จสมบูรณ์ ความลึกสูงสุดของคิวนี้คือ 1 รายการ ดังนั้น การเรียก Send() เมื่อมีการส่งข้อความก่อนหน้านี้ในคิวจะส่งผลให้มีการส่ง EchoRequest เพียงครั้งเดียวเท่านั้น

การเรียกใช้ Send() ขณะที่ WeaveEchoClient อยู่ในโหมดส่งซ้ํา (เนื่องจากการเรียกไปยัง SendSending() ก่อนหน้านี้) มีผลในการเร่งและรีเซ็ตรอบการส่ง แต่ไม่ได้ทําให้ WeaveEchoClient ออกจากโหมดการส่งซ้ํา

รายละเอียด
พารามิเตอร์
[in] payloadBuf
ออบเจ็กต์ PacketBuffer ที่มีข้อมูลเพย์โหลดเพื่อส่งไปยังแอปเทียบเท่า การเป็นเจ้าของบัฟเฟอร์นี้จะส่งไปยังออบเจ็กต์ WeaveEchoClient ในทุกกรณี

การส่งซ้ํา

WEAVE_ERROR SendRepeating(
  uint32_t sendIntervalMS
)

เริ่มส่งการส่งข้อความ EchoRequest ไปยังเพียร์อย่างต่อเนื่อง

การดําเนินการนี้จะเริ่มต้นกระบวนการส่งข้อความ EchoRequest ไปยังเพียร์อีกครั้ง เนื่องจากข้อความ EchoResponse จะได้รับจากเพียร์ ระบบจะส่งไปยังแอปพลิเคชันผ่านเหตุการณ์ ResponseReceived API

เมื่อมีการเรียก SendSending() WaveEchoClient จะเข้าสู่โหมดการส่งซ้ําซึ่งจะยังคงอยู่จนกว่าจะมีการเรียกใช้ Stop() หรือเกิดข้อผิดพลาด Binding การเรียกใช้ SendSending() หลายครั้งจะส่งผลต่อการรีเซ็ตรอบการส่งและการอัปเดตช่วงเวลา

ลําดับที่ส่งลําดับแรกเกิดขึ้นในเวลาที่มีการเรียกใช้ SendSending() หรือเมื่อใดก็ตามที่ เชื่อมโยง พร้อมใช้งานหลังจากเรียกใช้ SendSending() (ดูด้านล่าง) หลังจากนั้นจะส่งครั้งต่อไปในช่วงเวลาที่กําหนด

ทุกครั้งที่มีการส่ง WeaveEchoClient จะส่งคําขอไปยังแอปพลิเคชันผ่านเหตุการณ์ ProvisioningPayload API เพื่อเตรียมเพย์โหลดของข้อความ

หากออบเจ็กต์ การเชื่อมโยง ไม่อยู่ในสถานะพร้อมเมื่อถึงเวลาส่งข้อความ ระบบจะส่งคําขอไปยังเมธอด Binding::RequestReady() เพื่อเริ่มเตรียมการตามคําขอ ระบบจะหยุดการส่งข้อความซ้ําเพิ่มเติมจนกว่ากระบวนการนี้จะเสร็จสมบูรณ์ ความล้มเหลวในระหว่างการเตรียมความพร้อมการเชื่อมโยงตามคําขอจะทําให้ WeaveEchoClient ออกจากโหมดการส่งซ้ํา

ตั้งค่าการเรียกกลับเหตุการณ์

void SetEventCallback(
  EventCallback eventCallback
)

ตั้งค่าฟังก์ชันเรียกกลับของเหตุการณ์ API ในออบเจ็กต์ WeaveEchoClient

ปิดการทำงาน

void Shutdown(
  void
)

ปิดออบเจ็กต์ WeaveEchoClient ที่เริ่มต้นไว้ก่อนหน้านี้

โปรดทราบว่าระบบจะเรียกใช้วิธีนี้ได้ก็ต่อเมื่อมีการเรียกเมธอด Init() ก่อนหน้านี้เท่านั้น

หยุด

void Stop(
  void
)

หยุดการแลกเปลี่ยน Echo ที่กําลังดําเนินการและยกเลิกโหมดส่งซ้ํา

ไคลเอ็นต์ WeaveEcho

 WeaveEchoClient(
  void
)

ฟังก์ชันสาธารณะแบบคงที่

เครื่องจัดการเหตุการณ์เริ่มต้น

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

เครื่องจัดการเริ่มต้นสําหรับเหตุการณ์ API ของ WeaveEchoClient

แอปพลิเคชันจําเป็นต้องเรียกใช้เมธอดนี้สําหรับเหตุการณ์ API ใดๆ ก็ตามที่ไม่รู้จักหรือไม่รู้จัก พารามิเตอร์ที่ระบุต้องเหมือนกับพารามิเตอร์ที่ออบเจ็กต์ไคลเอ็นต์ส่งผ่านไปยังฟังก์ชันเครื่องจัดการเหตุการณ์ของแอปพลิเคชัน

รายละเอียด
พารามิเตอร์
[in] appState
ตัวชี้ไปยังข้อมูลสถานะที่แอปพลิเคชันกําหนดที่เชื่อมโยงกับออบเจ็กต์ไคลเอ็นต์
[in] eventType
รหัสเหตุการณ์ที่ส่งผ่านโค้ดเรียกกลับของเหตุการณ์
[in] inParam
การอ้างอิงพารามิเตอร์เหตุการณ์อินพุตที่ส่งผ่านโค้ดเรียกกลับของเหตุการณ์
[in] outParam
การอ้างอิงพารามิเตอร์เหตุการณ์เอาต์พุตที่ส่งผ่านโค้ดเรียกกลับของเหตุการณ์