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)먼저 메시지를 검증합니다. 스트림은 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차 펑션입니다. |
wait | W 비트를 설정해 메시지를 저장하려면 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를 반환합니다.