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

pdcomm_gem_spool_capture

함수

일반 1차 메시지(primary message)를 스풀(spool)에 제공합니다.

PdcommStatus pdcomm_gem_spool_capture(PdcommTcpEndpoint *endpoint, uint8_t stream, uint8_t function, uint8_t wait, const PdcommSecsItem *body, uint64_t now, PdcommGemSpoolWriteInfo *info)

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

먼저 메시지를 검증합니다. 스트림은 2부터 127까지여야 하고, 펑션은 홀수여야 하며, W1 메시지는 펑션 255를 사용할 수 없습니다. 본문은 GEM 항목 한도와 max_body_bytes 안에 드는 유효한 항목 하나여야 합니다. 그다음 스풀링이 활성화(enabled)되어 있고 동작 중(active)이며, 키가 카탈로그에 있고, 선택(selection)에 포함될 때만 메시지를 저장합니다. 그렇지 않으면 selected와 applied를 0으로 하여 #PDCOMM_OK를 반환하며, 애플리케이션은 메시지를 실시간으로 보내야 합니다. 스풀이 가득 차면 오버플로 정책을 적용합니다. 새 메시지를 버리는 경우는 적용된 통계 변경인 #PDCOMM_GEM_SPOOL_DISCARDED로 보고됩니다.

캡처는 인코딩된 본문을 복사합니다. 실시간 게시, 현재 값, 알람 관찰은 바꾸지 않습니다.

매개변수

이름설명
endpoint장비 스풀이 있는 Synchronized 상태의 엔드포인트입니다.
stream메시지의 스트림입니다.
function메시지의 1차 펑션입니다.
waitW 비트를 설정해 메시지를 저장하려면 1입니다. 0 또는 1이어야 합니다.
body메시지 본문입니다. 헤더만 있는 메시지이면 NULL입니다.
now캡처 시각으로 저장되는 애플리케이션 타임스탬프입니다.
info결과 유형(outcome)을 받습니다. NULL이 아니어야 합니다.

반환값

선택되지 않은 경우를 포함해 성공하면 #PDCOMM_OK를 반환합니다. 디렉터리 동기화가 확인되지 않은 채 저장되면 #PDCOMM_SPOOL_UNCONFIRMED를 반환합니다. info가 NULL이거나 너무 작거나, wait가 1보다 크거나, 메시지 키가 유효하지 않거나, endpoint가 NULL이면 #PDCOMM_INVALID_ARGUMENT를 반환합니다. 스풀이 없거나 동기화되지 않았으면 #PDCOMM_INVALID_STATE를 반환합니다. 본문이 항목 한도나 스풀 한도를 넘으면 #PDCOMM_LIMIT_EXCEEDED를 반환합니다. 본문이 유효한 항목이 아니면 #PDCOMM_INVALID_DATA를 반환합니다. 준비된 TCP 이벤트(staged event)가 대기 중이거나, 덮어쓸 수 있는 유일한 엔트리가 전달 중이면 #PDCOMM_BACKPRESSURE를 반환합니다. #PDCOMM_IO_ERROR 같은 영속화(persistence) 오류를 반환할 수 있으며, 이때 스풀은 바뀌지 않습니다. 그 밖에 #PDCOMM_ALLOCATION_FAILED 또는 #PDCOMM_POISONED를 반환합니다.