pdcomm::GemEndpoint
클래스
GemHost와 GemEquipment의 공통 기반 클래스입니다. GEM 역할(role)을 가진 HSMS 끝점(endpoint) 하나를 나타냅니다.
class GemEndpointGemEndpoint는 TcpEndpoint(SEMI E37 HSMS)와 그에 연결된 GEM 상태를 소유합니다. 스레드를 시작하지 않고 콜백도 없습니다. 애플리케이션 루프에서 poll()을 호출하고, tcp().nextEvent()를 비울 때까지 꺼내, 모든 이벤트를 큐 순서대로 handleEvent()에 전달합니다. 요청은 즉시 PdcommTcpToken을 반환하며, 응답은 나중에 GemResultInfo::token이 그 토큰과 같은 GemResult로 도착합니다.
두 역할은 공정 프로그램 저장소와 전송 호출(S7F1~S7F6, 그리고 호스트 전용인 S7F17과 S7F19)을 공유합니다. 장비에서는 스풀 호출(S2F43/F44, S2F59/F60, S6F23/F24, 스풀된 메시지 전달)도 공유합니다.
이 클래스 전체에서, TCP 이벤트가 준비(staged)되었지만 아직 처리되지 않은 동안에는 호출이 PDCOMM_BACKPRESSURE로 실패하고, 내부 패닉 이후에는 PDCOMM_POISONED로 실패합니다.
pdcomm::GemEndpoint *endpoint = hostRole ? static_cast<pdcomm::GemEndpoint *>(host.get())
: equipment.get();
endpoint->start();
while (running) {
endpoint->poll();
while (auto event = endpoint->tcp().nextEvent()) {
auto result = endpoint->handle(event);
// Inspect result.info() and act on it.
}
}
endpoint->stop();참고
- 이동 전용(move-only)입니다. 한 끝점에 대한 모든 호출(TCP 호출, GEM 호출, 소멸 포함)을 직렬화해야 합니다. 진행 중인 호출이 없는 끝점은 다른 스레드로 옮길 수 있습니다. 임시 배열을 만드는 호출은
std::bad_alloc도 던질 수 있습니다.
멤버
GemEndpoint
생성자
끝점을 이동합니다. 원본은 더 이상 네이티브 끝점을 소유하지 않습니다.
GemEndpoint(GemEndpoint &&) noexcept = defaultGemEndpoint
생성자
복사할 수 없습니다. 끝점이 네이티브 핸들을 독점 소유합니다.
GemEndpoint(const GemEndpoint &) = deletecancelProgramGrant
메서드
result가 활성화한 S7F1 허가를 취소합니다.
void cancelProgramGrant(const GemResult &result)허가는 원래 결과로 식별하며, 일치하는 프로그램 ID로는 절대 식별하지 않습니다.
매개변수
| 이름 | 설명 |
|---|---|
result | 허가를 활성화한 S7F1 요청의 결과입니다. |
참고
- 예외
pdcomm::Error: 허가가 오래되었거나 더 이상 활성 상태가 아니면PDCOMM_STALE_TOKEN,result가 활성화된 S7F1 요청이 아니면PDCOMM_INVALID_STATE입니다.
completeSpoolDelivery
메서드
스풀 전달 시도를 마치고, 성공하면 맨 앞 항목을 제거합니다.
GemSpoolWriteResult completeSpoolDelivery(GemResult &result, bool success)W 비트 메시지는 응답 본문을 자체 성공 정책에 따라 검사한 뒤에만 성공을 보고해야 합니다. 펑션 번호가 일치하는 것만으로는 성공이 아닙니다. W 비트가 없는 메시지에서 성공은 상대의 수신이 아니라 로컬 쓰기 완료를 뜻합니다. 실패하면 항목이 유지되고 전송 실행이 중지됩니다.
매개변수
| 이름 | 설명 |
|---|---|
result | 전달 결과입니다(GemOutcome::SpoolDeliveryResponse 또는 GemOutcome::SpoolDeliveryWritten). |
success | true이면 전달을 수락하고 큐에서 제거합니다. false이면 실행을 중지합니다. |
반환값
PDCOMM_OK 또는 PDCOMM_SPOOL_UNCONFIRMED와 변경 세부 정보입니다. 확인되지 않은 큐 제거(dequeue) 뒤에는 항목이 이미 제거된 상태이므로, 절대 다시 완료하면 안 됩니다.
참고
- 예외
pdcomm::Error: 그 밖의 상태에서 던집니다. 예를 들어 외부에서 왔거나, 오래되었거나, 이미 완료된 증명(proof)이면PDCOMM_STALE_TOKEN입니다.
configurePrograms
메서드
공정 프로그램(process program) 저장소를 연결하고 스트림 7 프로그램 전송을 활성화합니다.
void configurePrograms(const GemProgramOptions &options, const std::string &path = {})역할을 구성한 뒤, 끝점이 중지된 동안 한 번 호출합니다. path가 비어 있으면 저장소는 메모리에만 있습니다. 그렇지 않으면 파일을 배타적 잠금으로 열고, 크기가 제한된 스냅숏을 읽어 검증합니다. 파일이 없으면 빈 저장소로 시작하며, 손상된 파일은 절대 교체하지 않습니다. 파일 I/O는 호출 스레드에서 동기적으로 실행됩니다.
매개변수
| 이름 | 설명 |
|---|---|
options | gemProgramOptions()로 만든 한도입니다. |
path | NUL 바이트가 없는 UTF-8 파일 경로입니다. 메모리 전용이면 빈 문자열입니다. 상위 디렉터리가 있어야 합니다. 프로그램 ID는 경로로 사용하지 않습니다. |
참고
- 예외
pdcomm::Error: 끝점이 중지 상태가 아니거나, 역할이 없거나, 이미 프로그램 저장소가 있으면PDCOMM_INVALID_STATE입니다. 옵션이나 경로가 잘못되면PDCOMM_INVALID_ARGUMENT, 다른 프로세스가 파일 잠금을 쥐고 있으면PDCOMM_BACKPRESSURE, 파일 오류이면PDCOMM_IO_ERROR, 손상된 파일이면PDCOMM_INVALID_DATA, 파일이max_serialized_bytes를 넘으면PDCOMM_LIMIT_EXCEEDED입니다.
confirmProgramReply
메서드
확인되지 않은 설치를 수용해, 보관된 응답을 보낼 수 있게 합니다.
void confirmProgramReply(GemResult &result)respondProgram()이 PDCOMM_PROGRAM_UNCONFIRMED를 반환한 뒤 이 메서드를 호출해 불확실성을 수용하고, 같은 인수로 respondProgram()을 다시 호출합니다. 이 메서드는 파일을 동기화하지 않으며 아무것도 보내지 않습니다. 확인된 동기화가 필요하면 먼저 resyncPrograms()를 호출합니다.
매개변수
| 이름 | 설명 |
|---|---|
result | 확인을 기다리는 결과입니다. |
참고
- 예외
pdcomm::Error: 결과에 확인이 필요 없거나 이 끝점의 프로그램 요청이 아니면PDCOMM_INVALID_STATE입니다.
confirmSpoolReply
메서드
확인되지 않은 스풀 설치를 수용해, 보관된 응답을 보낼 수 있게 합니다.
void confirmSpoolReply(GemResult &result)respondSpool()이 PDCOMM_SPOOL_UNCONFIRMED를 반환한 뒤 이 메서드를 호출하고, respondSpool()을 다시 호출합니다. 이 메서드는 동기화도 전송도 하지 않습니다. 이후 응답은 GemSpoolDurability::Confirmed를 보고하며, 원래의 영구 저장 오류는 계속 확인할 수 있습니다.
매개변수
| 이름 | 설명 |
|---|---|
result | 확인을 기다리는 결과입니다. |
참고
- 예외
pdcomm::Error: 확인이 필요 없으면PDCOMM_INVALID_STATE, 오래된 결과이면PDCOMM_STALE_TOKEN입니다.
handle
메서드
handleEvent()의 별칭입니다.
GemResult handle(TcpEvent &event)매개변수
| 이름 | 설명 |
|---|---|
event | 이 끝점에서 TcpEndpoint::nextEvent()가 반환한 이벤트입니다. |
반환값
소유된 결과입니다.
참고
- 예외
pdcomm::Error: handleEvent()와 같은 상태입니다.
handleEvent
메서드
TCP 이벤트 하나를 GEM 계층에서 처리합니다.
GemResult handleEvent(TcpEvent &event)tcp().nextEvent()가 반환한 모든 이벤트를 큐 순서대로 처리해야 합니다. 이벤트는 호출하는 동안에만 빌려 쓰며, 호출 후에도 TCP 메타데이터와 본문을 읽을 수 있습니다. 성공하면 이벤트가 GEM에서 소비된 것으로 표시됩니다. 라이브러리는 많은 1차 메시지(primary message)에 자동으로 응답합니다(GemResultInfo::replySent 참고). 나머지는 명시적인 응답 호출을 기다립니다.
매개변수
| 이름 | 설명 |
|---|---|
event | 이 끝점에서 TcpEndpoint::nextEvent()가 반환한 이벤트입니다. |
반환값
소유된 결과입니다. GEM과 관련 없는 이벤트이면 GemResultKind::Ignored입니다.
참고
- 예외
pdcomm::Error: 이벤트가 이미 처리되었거나, 다른 끝점에서 왔거나, 이전 연결 세대에 속하면PDCOMM_STALE_TOKEN입니다. 커밋 전에는PDCOMM_BACKPRESSURE또는PDCOMM_ALLOCATION_FAILED이며, 이 경우 이벤트를 다시 시도할 수 있습니다. GEM 역할이 구성되지 않았으면PDCOMM_INVALID_STATE, 빈 이벤트이면PDCOMM_INVALID_ARGUMENT입니다.
nextEvent
메서드
큐에 있는 다음 TCP 이벤트를 가져옵니다. TcpEndpoint::nextEvent()로 전달합니다.
TcpEvent nextEvent()반환값
다음 이벤트입니다. 큐가 비어 있으면 빈 TcpEvent입니다.
참고
- 예외
pdcomm::Error: pdcomm_tcp_next_event()의 상태로 던집니다.
operator=
메서드
현재 네이티브 끝점을 소멸시킨 뒤 원본이 소유한 끝점을 넘겨받습니다.
GemEndpoint &operator=(GemEndpoint &&) noexcept = default반환값
이 끝점입니다.
operator=
메서드
복사 대입을 할 수 없습니다. 끝점이 네이티브 핸들을 독점 소유합니다.
GemEndpoint &operator=(const GemEndpoint &) = deletepoll
메서드
HSMS 끝점을 구동합니다. TcpEndpoint::poll()로 전달합니다.
size_t poll()연결 시도가 진행 중이면 최대 연결 타임아웃(timeout) 동안 블로킹될 수 있습니다.
반환값
수행한 내부 동작 수입니다. 큐에 들어간 이벤트 수가 아닙니다.
참고
- 예외
pdcomm::Error: pdcomm_tcp_poll()의 상태로 던집니다.
program
메서드
id로 저장된 본문의 복사본을 반환합니다.
SecsItem program(const SecsItem &id)ID의 형식도 식별 기준에 포함됩니다. ASCII "A"와 Binary 0x41은 서로 다른 ID입니다.
매개변수
| 이름 | 설명 |
|---|---|
id | 프로그램 ID 아이템입니다(비어 있지 않은 ASCII 또는 Binary). |
반환값
본문입니다. 해당 ID의 프로그램이 없으면 빈 아이템입니다.
참고
- 예외
pdcomm::Error: 프로그램 저장소가 구성되지 않았으면PDCOMM_INVALID_STATE, ID 아이템이 잘못되면PDCOMM_INVALID_ARGUMENT입니다.
programAt
메서드
저장된 프로그램 하나의 복사본을 저장소 순서에 따라 반환합니다.
GemProgramEntry programAt(size_t index)매개변수
| 이름 | 설명 |
|---|---|
index | 0부터 시작하는 위치입니다. GemProgramState::programCount보다 작아야 합니다. |
반환값
독립적으로 소유되는 ID 아이템과 본문 아이템입니다.
참고
- 예외
pdcomm::Error:index가 잘못되면PDCOMM_OUT_OF_RANGE, 프로그램 저장소가 구성되지 않았으면PDCOMM_INVALID_STATE입니다.
programDeleteLocal
메서드
로컬 저장소에서 프로그램을 삭제합니다.
GemProgramWriteResult programDeleteLocal(const std::vector<const SecsItem *> &ids = {})끝점이 중지된 동안에만 허용됩니다. 선택한 ID는 서로 달라야 하며 저장소에 있어야 합니다.
매개변수
| 이름 | 설명 |
|---|---|
ids | 삭제할 프로그램 ID입니다. 빈 벡터이면 모든 프로그램을 삭제합니다. 아이템은 호출하는 동안에만 빌려 씁니다. |
반환값
PDCOMM_OK입니다. 삭제는 설치되었지만 파일 동기화가 확인되지 않았으면 PDCOMM_PROGRAM_UNCONFIRMED입니다. 이 경우 삭제를 반복하면 안 됩니다.
참고
- 예외
pdcomm::Error: 그 밖의 모든 상태에서 던집니다. 예를 들어PDCOMM_INVALID_STATE, 또는 알 수 없거나 중복된 ID이면PDCOMM_INVALID_ARGUMENT입니다.
programGrant
메서드
S7F1 Process Program Load Inquire를 보냅니다.
PdcommTcpToken programGrant(const SecsItem &id, uint32_t length)프로그램 저장소와 Communicating 상태가 필요합니다. 응답은 GemOutcome::ProgramGrantReceived 결과로 도착합니다. 허가(grant) 협상은 자동으로 이루어지지 않습니다.
매개변수
| 이름 | 설명 |
|---|---|
id | 적재할 프로그램 ID입니다. |
length | 페이로드 바이트 단위의 프로그램 본문 크기(LENGTH)입니다. |
반환값
제출한 요청의 토큰입니다.
참고
- 예외
pdcomm::Error: 통신 중이 아니거나 저장소가 구성되지 않았으면PDCOMM_INVALID_STATE입니다. 대기 요청 슬롯 32개가 모두 사용 중이거나 TCP 이벤트가 스테이징되어 있으면PDCOMM_BACKPRESSURE, 대기 중인 프로그램 ID 예산이 소진되면PDCOMM_LIMIT_EXCEEDED, ID가 잘못되면PDCOMM_INVALID_ARGUMENT입니다.
programPut
메서드
프로그램 하나를 로컬 저장소에 씁니다.
GemProgramWriteResult programPut(const SecsItem &id, const SecsItem &body, GemProgramMode mode)끝점이 중지된 동안에만 허용됩니다. 검증과 준비는 영구 저장(persistence)과 메모리 내 커밋보다 먼저 이루어집니다. 회선(wire) 메시지는 관여하지 않습니다.
매개변수
| 이름 | 설명 |
|---|---|
id | 프로그램 ID입니다. 비어 있지 않은 ASCII 또는 Binary이며, 최대 min(limit, 120)바이트입니다. |
body | A, B, I1, I2, I4, I8, U1, U2, U4 또는 U8 형식의 프로그램 본문입니다. 원시 바이트와 빈 값도 그대로 유지합니다. |
mode | 생성(create), 교체(replace) 또는 업서트(upsert)입니다. |
반환값
PDCOMM_OK입니다. 변경은 설치되었지만 파일 동기화가 확인되지 않았으면 PDCOMM_PROGRAM_UNCONFIRMED입니다. 이 경우 쓰기를 반복하면 안 되며, GemProgramWriteInfo::applied와 GemProgramWriteInfo::durability를 확인해야 합니다.
참고
- 예외
pdcomm::Error: 그 밖의 모든 상태에서 던집니다. 예를 들어 끝점이 중지 상태가 아니거나 저장소가 없으면PDCOMM_INVALID_STATE, ID나 본문이 잘못되었거나 모드가 충돌하면PDCOMM_INVALID_ARGUMENT, 저장소 한도를 넘으면PDCOMM_LIMIT_EXCEEDED, 또는PDCOMM_IO_ERROR입니다. 이 오류에서는 저장소가 바뀌지 않습니다.
programRequest
메서드
S7F5 Process Program Request를 보냅니다.
PdcommTcpToken programRequest(const SecsItem &id)응답은 GemOutcome::ProgramDataReceived 결과로 도착합니다. 받은 프로그램은 자동으로 설치되지 않습니다.
매개변수
| 이름 | 설명 |
|---|---|
id | 요청할 프로그램 ID입니다. |
반환값
제출한 요청의 토큰입니다.
참고
- 예외
pdcomm::Error: programGrant()와 같은 상태입니다.
programSend
메서드
S7F3 Process Program Send를 보냅니다.
PdcommTcpToken programSend(const SecsItem &id, const SecsItem &body)응답은 GemOutcome::ProgramAckReceived 결과로 도착합니다. S7F4를 받았다고 해서 상대가 프로그램을 선택하거나 실행했다는 뜻은 아닙니다.
매개변수
| 이름 | 설명 |
|---|---|
id | 프로그램 ID입니다. |
body | 프로그램 본문입니다. |
반환값
제출한 요청의 토큰입니다.
참고
- 예외
pdcomm::Error: programGrant()와 같은 상태입니다.
programState
메서드
공정 프로그램 저장소의 카운터를 반환합니다.
GemProgramState programState()반환값
프로그램, 바이트, 허가(grant) 카운터입니다.
참고
- 예외
pdcomm::Error: 프로그램 저장소가 구성되지 않았으면PDCOMM_INVALID_STATE, TCP 이벤트가 스테이징되어 있는 동안에는PDCOMM_BACKPRESSURE입니다.
respondProgram
메서드
받은 공정 프로그램 요청에 응답하고 네이티브 상태를 반환합니다.
PdcommStatus respondProgram(GemResult &result, GemProgramMode mode, uint8_t decision = 0)GemOutcome::ProgramReceived 결과에 사용합니다. S7F1에서는 결정 값이 PPGNT이며, 허가는 S7F2가 큐에 들어간 뒤에만 활성화됩니다. S7F3과 S7F17에서는 결정 값이 ACKC7이며, 수락한 변경은 응답을 큐에 넣기 전에 설치되고 커밋됩니다. S7F5와 S7F19는 결정 값 0이 필요합니다. 설치 후 전송이 실패하면 같은 모드와 결정 값으로 다시 시도합니다. 이때는 보관된 응답만 다시 보냅니다.
이 메서드는 네이티브 상태 때문에 예외를 던지지 않습니다. 반환 값을 확인해야 합니다.
매개변수
| 이름 | 설명 |
|---|---|
result | 받은 요청의 결과입니다. 응답 상태로 갱신됩니다. |
mode | S7F1과 S7F3에서 사용하는 쓰기 모드입니다. |
decision | 0이면 수락합니다. 1부터 5까지이면 그 PPGNT(S7F1) 또는 ACKC7(S7F3, S7F17) 코드로 거부합니다. |
반환값
PDCOMM_OK입니다. 변경은 설치되었지만 응답을 보내지 않았으면 PDCOMM_PROGRAM_UNCONFIRMED입니다(confirmProgramReply() 참고). 응답을 보관한 채 전송이 실패하면 PDCOMM_BACKPRESSURE 또는 다른 전송 실패 상태입니다. 오래되었거나, 소비되었거나, 이미 응답한 요청이면 PDCOMM_STALE_TOKEN, 결정 값이 잘못되면 PDCOMM_INVALID_ARGUMENT입니다.
respondSpool
메서드
받은 스풀 요청에 응답하고 네이티브 상태를 반환합니다.
PdcommStatus respondSpool(GemResult &result)장비에서 GemOutcome::SpoolReceived 결과(S2F43, S2F59 또는 S6F23)에 사용합니다. 라이브러리가 정해진 응답을 만듭니다. S2F44는 스트림별 오류를, S2F60은 현재 선택을 담으며, S6F24는 바쁨(busy), 데이터 없음, 수락 중 하나입니다. 구성과 삭제(purge)는 성공 확인 응답 전에 설치되며, 전송 실행(transmit run)은 수락한 S6F24가 큐에 들어간 뒤에만 시작합니다. GemEquipment::syncSpool()로 동기화된 최신 상태가 필요합니다.
이 메서드는 네이티브 상태 때문에 예외를 던지지 않습니다. 반환 값을 확인해야 합니다.
매개변수
| 이름 | 설명 |
|---|---|
result | 받은 요청의 결과입니다. |
반환값
PDCOMM_OK입니다. 설치되었지만 응답을 보내지 않았으면 PDCOMM_SPOOL_UNCONFIRMED입니다(confirmSpoolReply() 참고). 다시 시도할 수 있도록 응답을 보관한 채 전송이 실패하면 PDCOMM_BACKPRESSURE 또는 다른 전송 실패 상태입니다. 오래되었거나, 소비되었거나, 이미 응답한 요청이면 PDCOMM_STALE_TOKEN입니다.
resyncPrograms
메서드
프로그램 파일 상위 디렉터리의 동기화를 다시 시도합니다.
void resyncPrograms()데이터를 다시 쓰지 않으며, 보관된 원격 응답을 확인(confirm)하지도 않습니다.
참고
- 예외
pdcomm::Error: 메모리 전용 저장소이거나 저장소가 없으면PDCOMM_INVALID_STATE, 동기화가 다시 실패하면PDCOMM_IO_ERROR입니다.
resyncSpool
메서드
스풀 파일 상위 디렉터리의 동기화를 다시 시도합니다.
void resyncSpool()데이터를 다시 쓰거나, 확인 응답(acknowledgement)을 보내거나, 응답을 확인(confirm)하거나, 큐에서 항목을 제거하지 않습니다.
참고
- 예외
pdcomm::Error: 메모리 전용 스풀이거나 스풀이 없으면PDCOMM_INVALID_STATE, 동기화가 다시 실패하면PDCOMM_IO_ERROR입니다.
retrySpoolDequeue
메서드
전달은 수락되었지만 큐 제거에 실패한 항목의 제거를 다시 시도합니다.
GemSpoolWriteResult retrySpoolDequeue()다시 보내지 않고 영구 저장과 큐 제거만 수행합니다. 재연결 후에도 원래 전달 결과 없이 사용할 수 있습니다.
반환값
PDCOMM_OK 또는 PDCOMM_SPOOL_UNCONFIRMED와 변경 세부 정보입니다.
참고
- 예외
pdcomm::Error: 그 밖의 상태에서 던집니다. 예를 들어 대기 중인 큐 제거가 없으면PDCOMM_INVALID_STATE입니다.
sendNextSpool
메서드
수락된 전송 실행 중에 스풀 맨 앞의 메시지를 보냅니다.
PdcommTcpToken sendNextSpool()정확히 메시지 하나만 보내며, 자동 반복은 없습니다. W 비트 메시지는 네이티브 대기 슬롯을 사용하고, 응답은 GemOutcome::SpoolDeliveryResponse로 도착합니다. W 비트가 없는 메시지는 전체 쓰기가 끝난 뒤 GemOutcome::SpoolDeliveryWritten을 보고합니다. completeSpoolDelivery()를 호출하기 전에는 아무것도 제거하지 않습니다.
반환값
제출한 메시지의 토큰입니다.
참고
- 예외
pdcomm::Error: 활성 전송 실행이 없거나 스풀이 동기화되지 않았으면PDCOMM_INVALID_STATE입니다. 이미 전달이 진행 중이거나 W 비트 메시지에 쓸 빈 대기 슬롯이 없으면PDCOMM_BACKPRESSURE, 스풀이 비어 있으면PDCOMM_OUT_OF_RANGE입니다. 제출 전에 실패하면 큐는 유지되고 실행이 중지됩니다.
spoolCatalogAt
메서드
등록된 스풀 가능 스트림·펑션 쌍 하나를 반환합니다.
GemSpoolMessageKey spoolCatalogAt(size_t index)매개변수
| 이름 | 설명 |
|---|---|
index | 0부터 시작하는 카탈로그 위치입니다. GemSpoolState::catalogCount보다 작아야 합니다. |
반환값
스트림과 펑션입니다.
참고
- 예외
pdcomm::Error:index가 잘못되면PDCOMM_OUT_OF_RANGE, 스풀링이 구성되지 않았으면PDCOMM_INVALID_STATE입니다.
spoolEntryAt
메서드
저장된 스풀 항목 하나의 복사본을 캡처 시각과 함께 큐 순서에 따라 반환합니다.
GemSpoolEntry spoolEntryAt(size_t index)래퍼는 같은 인덱스에 대해 pdcomm_gem_spool_entry_at()과 pdcomm_gem_spool_entry_time_at() 두 네이티브 호출을 수행합니다.
매개변수
| 이름 | 설명 |
|---|---|
index | 0부터 시작하는 큐 위치입니다. GemSpoolState::messageCount보다 작아야 합니다. |
반환값
항목 메타데이터, 소유된 본문, 캡처 시각입니다.
참고
- 예외
pdcomm::Error:index가 잘못되면PDCOMM_OUT_OF_RANGE, 스풀링이 구성되지 않았으면PDCOMM_INVALID_STATE입니다.
spoolSelectionAt
메서드
현재 스풀링 선택에서 선택된 스트림 하나를 반환합니다.
GemSpoolSelection spoolSelectionAt(size_t index)매개변수
| 이름 | 설명 |
|---|---|
index | 0부터 시작하는 위치입니다. GemSpoolState::selectionCount보다 작아야 합니다. |
반환값
스트림과 펑션 목록입니다. 목록이 비어 있으면 등록된 모든 1차 메시지를 선택합니다.
참고
- 예외
pdcomm::Error:index가 잘못되면PDCOMM_OUT_OF_RANGE, 스풀링이 구성되지 않았으면PDCOMM_INVALID_STATE입니다.
spoolState
메서드
장비 스풀의 상태를 반환합니다.
GemSpoolState spoolState()반환값
카운터, 정책, 플래그입니다. GemEquipment::syncSpool() 호출이 필요한 동안에는 synchronized가 false입니다.
참고
- 예외
pdcomm::Error: 호스트이거나 스풀링(spooling)이 구성되지 않았으면PDCOMM_INVALID_STATE입니다.
start
메서드
HSMS 끝점을 시작합니다. TcpEndpoint::start()로 전달합니다.
void start()시작하기 전에 GEM 역할과 모든 저장소를 구성합니다.
참고
- 예외
pdcomm::Error: pdcomm_tcp_start()의 상태로 던집니다.
state
메서드
현재 GEM 상태를 반환합니다.
GemState state()먼저 GEM 상태를 HSMS 세션과 동기화합니다. 따라서 새 연결 세대(generation)나 선택(selection) 상실이 즉시 반영됩니다.
반환값
역할, 통신 상태와 제어 상태, 식별 정보, 대기 건수입니다.
참고
- 예외
pdcomm::Error: TCP 이벤트가 스테이징(staged)되어 있는 동안에는PDCOMM_BACKPRESSURE, GEM 역할이 구성되지 않았으면PDCOMM_INVALID_STATE입니다.
stop
메서드
HSMS 끝점을 중지합니다. TcpEndpoint::stop()으로 전달합니다.
void stop()정상적으로 닫으려면, 끝점을 파괴하기 전에 TCP 상태가 closed를 보고할 때까지 계속 폴링하고 이벤트를 비웁니다.
참고
- 예외
pdcomm::Error: pdcomm_tcp_stop()의 상태로 던집니다.
stopSpoolTransmit
메서드
현재 전송 실행을 끝냅니다.
void stopSpoolTransmit()참고
- 예외
pdcomm::Error: 전달이 진행 중이거나 수락된 큐 제거가 대기 중이면PDCOMM_INVALID_STATE입니다.
tcp
메서드
기반 HSMS 끝점을 반환합니다.
TcpEndpoint &tcp() noexceptTcpEndpoint::nextEvent(), TcpEndpoint::state(), TcpEndpoint::localAddress(), TcpEndpoint::linktest(), TcpEndpoint::reply() 같은 TCP 수준 호출에 사용합니다.
반환값
소유된 TcpEndpoint입니다. 이 객체가 살아 있는 동안 유효합니다.
tcp
메서드
읽기 전용 호출에 사용할 기반 HSMS 끝점(endpoint)을 반환합니다.
const TcpEndpoint &tcp() const noexcept반환값
소유된 TcpEndpoint입니다. 이 객체가 살아 있는 동안 유효합니다.