pdcomm::TcpEvent
클래스
호출자가 소유하는, HSMS 끝점(endpoint) 이벤트 하나의 불변 스냅숏입니다.
class TcpEventTcpEndpoint::nextEvent()는 이벤트를 발생한 순서대로 반환합니다. info()는 이벤트의 종류(상태 변경, 데이터 메시지 수신, 거래(transaction) 실패, 프로토콜 오류, 전송 오류, W0 쓰기 완료), 코드, 메시지 헤더, 토큰을 해석합니다. body()는 수신한 데이터 메시지의 SECS-II 본문을 복사합니다.
이벤트는 메시지 본문을 포함한 자신의 데이터를 소유합니다. 끝점이 파괴된 뒤에도, GemEndpoint::handleEvent()가 이벤트를 처리한 뒤에도 계속 읽을 수 있습니다.
참고
PdcommTcpEvent를 감싸는 이동 전용(move-only) RAII 래퍼입니다. 한 이벤트에서 info()와 body()를 동시에 실행할 수 있지만, 이벤트의 파괴나 이동과 동시에 실행하면 안 됩니다. body()는std::bad_alloc도 던질 수 있습니다.
멤버
TcpEvent
생성자
네이티브 핸들을 소유하지 않는 빈 이벤트를 만듭니다.
TcpEvent() noexcept = defaultTcpEvent
생성자
other가 소유한 네이티브 핸들의 소유권을 가져옵니다.
TcpEvent(TcpEvent &&other) noexcept매개변수
| 이름 | 설명 |
|---|---|
other | 원본 래퍼입니다. 호출 후 비게 됩니다. |
TcpEvent
생성자
복사할 수 없습니다. 래퍼가 네이티브 핸들을 단독으로 소유합니다.
TcpEvent(const TcpEvent &) = deletebody
메서드
수신한 데이터 메시지의 메시지 본문을 복사합니다.
std::vector<uint8_t> body() const바이트는 수신한 그대로의 인코딩된 SECS-II 아이템입니다. 본문이 없는 메시지이거나 PDCOMM_TCP_RECEIVED 이외의 이벤트 종류이면 복사본은 비어 있습니다.
반환값
본문의 독립된 복사본입니다.
참고
- 예외
pdcomm::Error: 이벤트가 비어 있으면PDCOMM_INVALID_ARGUMENT입니다. 라이브러리가 내부 패닉(panic)을 격리했으면PDCOMM_INTERNAL_ERROR입니다.
info
메서드
이벤트의 종류, 코드, 메시지 헤더, 토큰을 해석합니다.
PdcommTcpEventInfo info() const이벤트 종류에 해당하지 않는 필드는 0입니다. PDCOMM_TCP_RECEIVED 이벤트에서는 is_reply로 호출자가 보낸 요청에 대한 응답인지, 상대가 보낸 1차 메시지(primary message)인지 구분합니다. 응답의 토큰은 TcpEndpoint::request()가 반환한 토큰과 같습니다.
반환값
pdcomm_tcp_event_info()가 채운 설명입니다.
참고
- 예외
pdcomm::Error: 이벤트가 비어 있으면PDCOMM_INVALID_ARGUMENT입니다. 라이브러리가 내부 패닉(panic)을 격리했으면PDCOMM_INTERNAL_ERROR입니다.
nativeHandle
메서드
C API를 직접 호출할 때 쓸, 소유 중인 네이티브 핸들을 반환합니다.
PdcommTcpEvent *nativeHandle() noexcept반환값
핸들입니다. 빈 이벤트이면 nullptr입니다. 소유권은 이 래퍼에 남습니다.
nativeHandle
메서드
읽기 전용 C API 호출에 쓸, 소유 중인 네이티브 핸들을 반환합니다.
const PdcommTcpEvent *nativeHandle() const noexcept반환값
핸들입니다. 빈 이벤트이면 nullptr입니다. 소유권은 이 래퍼에 남습니다.
operator bool
메서드
래퍼가 네이티브 이벤트를 소유하는지 알려 줍니다.
explicit operator bool() const noexceptTcpEndpoint::nextEvent()는 큐가 비어 있으면 빈 이벤트를 반환합니다. 따라서 while (auto event = endpoint.nextEvent())로 큐를 모두 비울 수 있습니다.
반환값
이벤트를 소유하면 true입니다.
operator=
메서드
현재 핸들을 해제한 뒤 other가 소유한 핸들의 소유권을 가져옵니다.
TcpEvent &operator=(TcpEvent &&other) noexcept매개변수
| 이름 | 설명 |
|---|---|
other | 원본 래퍼입니다. 호출 후 비게 됩니다. |
반환값
이 래퍼입니다.
operator=
메서드
복사 대입을 할 수 없습니다. 래퍼가 네이티브 핸들을 단독으로 소유합니다.
TcpEvent &operator=(const TcpEvent &) = delete~TcpEvent
메서드
pdcomm_tcp_event_destroy()로 네이티브 이벤트를 해제합니다.
~TcpEvent()빈 이벤트는 아무것도 해제하지 않습니다. 이벤트를 빌려 쓰는 GEM 호출이 실행 중일 때는 이벤트를 파괴하면 안 됩니다.