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

pdcomm_gem_handle_event

함수

GEM 역할로 TCP 이벤트 하나를 처리하고 소유권이 있는 결과를 반환합니다.

PdcommStatus pdcomm_gem_handle_event(PdcommTcpEndpoint *endpoint, PdcommTcpEvent *event, PdcommGemResult **out)

선언 위치: #include <pdcomm_gem.h>

pdcomm_tcp_next_event()에서 받은 모든 이벤트를 큐 순서대로 전달합니다. 호출이 실행되는 동안 이벤트를 배타적으로 빌려 쓰며, 호출 후에도 이벤트의 TCP 메타데이터와 본문은 읽을 수 있고 소유권은 여전히 호출자에게 있습니다.

  • 수신한 1차 메시지는 역할이 처리하면 자동으로 응답하거나(reply_sent가 설정됨), 다른 GEM 헤더의 형식별 API를 통해 애플리케이션이 결정하도록 보고하거나, 응답 없이 #PDCOMM_GEM_UNHANDLED로 보고합니다.
  • 대기 중인 GEM 요청에 대한 응답은 #PDCOMM_GEM_RESPONSE, #PDCOMM_GEM_INVALID_RESPONSE 또는 #PDCOMM_GEM_FAILED가 되며 대기 슬롯을 해제합니다.
  • 대기 중인 요청의 트랜잭션 실패는 #PDCOMM_GEM_FAILED가 됩니다.
  • 그 밖의 이벤트는 #PDCOMM_GEM_IGNORED가 됩니다.

호출이 성공하면 이벤트는 GEM이 처리한 것으로 표시되며, 다시 처리하면 #PDCOMM_STALE_TOKEN을 반환합니다. 이 확정 전에 #PDCOMM_ALLOCATION_FAILED 또는 #PDCOMM_BACKPRESSURE가 반환되면 이벤트는 처리되지 않은 상태로 남으므로 같은 이벤트로 다시 호출할 수 있습니다.

매개변수

이름설명
endpointGEM 역할을 가진 유효한 TCP 엔드포인트입니다.
event같은 엔드포인트에서 pdcomm_tcp_next_event()로 받은 이벤트입니다.
out새 결과를 받습니다. 먼저 NULL로 설정되므로 실패하면 항상 NULL입니다. NULL이 아니어야 합니다.

반환값

결과를 만들었으면 #PDCOMM_OK를 반환합니다(무시, 실패, 잘못된 응답, 미처리 결과도 포함). endpoint, event 또는 out이 NULL이면 #PDCOMM_INVALID_ARGUMENT를 반환합니다. 이벤트를 이미 처리했거나, 다른 엔드포인트 또는 이전 연결 세대에서 온 메시지 수신, 트랜잭션 실패, W0 기록 이벤트이면 #PDCOMM_STALE_TOKEN을 반환합니다(이전 세대의 실패는 해당 요청이 아직 대기 중이면 받아들입니다). 엔드포인트에 GEM 역할이 없으면 #PDCOMM_INVALID_STATE를 반환합니다. 준비된 TCP 이벤트(staged event)가 있거나 자동 응답을 아직 큐에 넣을 수 없으면 #PDCOMM_BACKPRESSURE를 반환합니다. 결과나 응답을 만들 수 없으면 #PDCOMM_ALLOCATION_FAILED, #PDCOMM_LIMIT_EXCEEDED 또는 그 밖의 TCP 상태 코드를 반환합니다. 엔드포인트가 오염(poisoned) 상태이면 #PDCOMM_POISONED를 반환합니다.

참고

  • 소유권: pdcomm_gem_result_destroy()로 결과를 해제합니다. 결과는 모든 스냅샷 데이터를 소유하며 이벤트와 엔드포인트가 해제된 뒤에도 남습니다. 이벤트는 pdcomm_tcp_event_destroy()로 따로 해제합니다.