콘텐츠로 이동
무료 평가 시작

pdcomm::TcpEvent

클래스

호출자가 소유하는, HSMS 끝점(endpoint) 이벤트 하나의 불변 스냅숏입니다.

class TcpEvent

선언 위치: #include <pdcomm_tcp.hpp>

TcpEndpoint::nextEvent()는 이벤트를 발생한 순서대로 반환합니다. info()는 이벤트의 종류(상태 변경, 데이터 메시지 수신, 거래(transaction) 실패, 프로토콜 오류, 전송 오류, W0 쓰기 완료), 코드, 메시지 헤더, 토큰을 해석합니다. body()는 수신한 데이터 메시지의 SECS-II 본문을 복사합니다.

이벤트는 메시지 본문을 포함한 자신의 데이터를 소유합니다. 끝점이 파괴된 뒤에도, GemEndpoint::handleEvent()가 이벤트를 처리한 뒤에도 계속 읽을 수 있습니다.

참고

  • PdcommTcpEvent를 감싸는 이동 전용(move-only) RAII 래퍼입니다. 한 이벤트에서 info()와 body()를 동시에 실행할 수 있지만, 이벤트의 파괴나 이동과 동시에 실행하면 안 됩니다. body()는 std::bad_alloc도 던질 수 있습니다.

멤버

TcpEvent

생성자

네이티브 핸들을 소유하지 않는 빈 이벤트를 만듭니다.

TcpEvent() noexcept = default

선언 위치: #include <pdcomm_tcp.hpp>

TcpEvent

생성자

other가 소유한 네이티브 핸들의 소유권을 가져옵니다.

TcpEvent(TcpEvent &&other) noexcept

선언 위치: #include <pdcomm_tcp.hpp>

매개변수

이름설명
other원본 래퍼입니다. 호출 후 비게 됩니다.

TcpEvent

생성자

복사할 수 없습니다. 래퍼가 네이티브 핸들을 단독으로 소유합니다.

TcpEvent(const TcpEvent &) = delete

선언 위치: #include <pdcomm_tcp.hpp>

body

메서드

수신한 데이터 메시지의 메시지 본문을 복사합니다.

std::vector<uint8_t> body() const

선언 위치: #include <pdcomm_tcp.hpp>

바이트는 수신한 그대로의 인코딩된 SECS-II 아이템입니다. 본문이 없는 메시지이거나 PDCOMM_TCP_RECEIVED 이외의 이벤트 종류이면 복사본은 비어 있습니다.

반환값

본문의 독립된 복사본입니다.

참고

  • 예외 pdcomm::Error: 이벤트가 비어 있으면 PDCOMM_INVALID_ARGUMENT입니다. 라이브러리가 내부 패닉(panic)을 격리했으면 PDCOMM_INTERNAL_ERROR입니다.

info

메서드

이벤트의 종류, 코드, 메시지 헤더, 토큰을 해석합니다.

PdcommTcpEventInfo info() const

선언 위치: #include <pdcomm_tcp.hpp>

이벤트 종류에 해당하지 않는 필드는 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

선언 위치: #include <pdcomm_tcp.hpp>

반환값

핸들입니다. 빈 이벤트이면 nullptr입니다. 소유권은 이 래퍼에 남습니다.

nativeHandle

메서드

읽기 전용 C API 호출에 쓸, 소유 중인 네이티브 핸들을 반환합니다.

const PdcommTcpEvent *nativeHandle() const noexcept

선언 위치: #include <pdcomm_tcp.hpp>

반환값

핸들입니다. 빈 이벤트이면 nullptr입니다. 소유권은 이 래퍼에 남습니다.

operator bool

메서드

래퍼가 네이티브 이벤트를 소유하는지 알려 줍니다.

explicit operator bool() const noexcept

선언 위치: #include <pdcomm_tcp.hpp>

TcpEndpoint::nextEvent()는 큐가 비어 있으면 빈 이벤트를 반환합니다. 따라서 while (auto event = endpoint.nextEvent())로 큐를 모두 비울 수 있습니다.

반환값

이벤트를 소유하면 true입니다.

operator=

메서드

현재 핸들을 해제한 뒤 other가 소유한 핸들의 소유권을 가져옵니다.

TcpEvent &operator=(TcpEvent &&other) noexcept

선언 위치: #include <pdcomm_tcp.hpp>

매개변수

이름설명
other원본 래퍼입니다. 호출 후 비게 됩니다.

반환값

이 래퍼입니다.

operator=

메서드

복사 대입을 할 수 없습니다. 래퍼가 네이티브 핸들을 단독으로 소유합니다.

TcpEvent &operator=(const TcpEvent &) = delete

선언 위치: #include <pdcomm_tcp.hpp>

~TcpEvent

메서드

pdcomm_tcp_event_destroy()로 네이티브 이벤트를 해제합니다.

~TcpEvent()

선언 위치: #include <pdcomm_tcp.hpp>

빈 이벤트는 아무것도 해제하지 않습니다. 이벤트를 빌려 쓰는 GEM 호출이 실행 중일 때는 이벤트를 파괴하면 안 됩니다.