pdcomm::opcua::MfcClientEvent
구조체
MfcClientWorker::Drain()으로 워커의 메일박스에서 꺼낸 이벤트 하나입니다.
struct MfcClientEventkind는 어떤 멤버가 의미 있는지 알려 줍니다. 나머지 멤버는 기본값을 유지합니다. Failed 이벤트의 phase는 실패가 일어난 위치를 알려 줍니다.
begin: 요청을 보내기 전에 거부했습니다. #PDCOMM_OPCUA_INVALID_INPUT 또는 #PDCOMM_OPCUA_LIMIT이면 그 요청만 실패합니다. 다른 상태이면 워커도 종료됩니다.response: 요청을 보냈지만 client::take()가 #PDCOMM_OPCUA_RUNTIME_ERROR로 완료했습니다. 서버가 응답을 중단했거나(Part 6 중단 청크(abort chunk)이며, 텍스트에 StatusCode가 나옵니다) 응답이 잘못된 경우입니다. 그 요청만 실패합니다. 잘못된 응답은 연결도 닫으므로, 이후 워커는worker실패로 종료됩니다.abort: 요청이 완료되기 전에 워커가 멈췄습니다(#PDCOMM_OPCUA_CLOSED). 요청은 보내졌을 수도 있고 보내지지 않았을 수도 있습니다.- correlation이 0인
worker: connect, activation, poll, take, close 또는 어댑터가 실패했습니다. 워커가 멈춥니다.
멤버
aborted
필드
Stopped: 워커가 그 밖의 방식으로 종료되었습니다. 항상 !orderly입니다.
bool aborted = falseaccepted
필드
Stopped: Submit()이 받아들인 요청 수입니다.
ULONGLONG accepted = 0completed
필드
Stopped: 응답으로 끝났거나 begin 또는 response 실패로 끝난 요청 수입니다.
ULONGLONG completed = 0correlation
필드
Pending, Completed, Failed: MfcClientWorker::Submit()에 전달한 상관 ID(correlation)입니다. 워커 실패이면 0입니다.
ULONGLONG correlation = 0discarded
필드
Stopped: abort 실패로 끝난 요청 수입니다.
ULONGLONG discarded = 0kind
필드
이벤트 종류입니다.
MfcClientEventKind kind = MfcClientEventKind::Failedmetadata
필드
Completed: 응답의 요청 ID, 인코딩 ID, serviceResult입니다.
pdcomm_opcua_response_info metadata{}orderly
필드
Stopped: drain이 CloseSession과 채널 닫기로 끝났습니다.
bool orderly = falseownerThread
필드
Ready: 네이티브 클라이언트를 소유한 워커 스레드의 Win32 스레드 ID입니다.
DWORD ownerThread = 0phase
필드
Failed: begin, response, abort, worker 중 하나입니다.
CString phasereason
필드
Stopped: drained-and-closed, aborted, native-error, adapter-error 중 하나입니다.
CString reasonrequestId
필드
Pending, Completed: 네이티브 요청 ID(requestHandle)입니다.
uint32_t requestId = 0status
필드
Failed: 실패의 ::pdcomm_opcua_status 값입니다.
int32_t status = PDCOMM_OPCUA_OKtext
필드
Failed: 영문 상세 텍스트이며, 네이티브 호출 직후 워커 스레드에서 복사합니다.
CString textvalue
필드
Completed: 소유된 응답이며, ServiceFault일 수 있습니다. 클라이언트와 워커보다 오래 유지되며, 마지막 참조가 사라질 때까지 네이티브 핸들을 보유합니다.
std::shared_ptr<const response> value