PDComm.GemEndpoint
클래스
GemHost와 GemEquipment가 공유하는 멤버를 제공합니다. HSMS(SEMI E37) TCP 연결 하나 위에 구성한 동기식 SEMI E30(GEM) 끝점입니다.
public abstract class GemEndpoint : IDisposable끝점에는 내부 스레드가 없습니다. 애플리케이션은 GemEndpoint.Start를 호출한 다음, GemEndpoint.Poll을 반복해서 호출하고, GemEndpoint.NextEvent로 이벤트를 모두 꺼내며, GEM 상태와 자동 응답과 대기 중인 요청이 일관되게 유지되도록 모든 이벤트를 큐 순서대로 GemEndpoint.HandleEvent에 전달합니다. 전용 폴링 스레드에서 끝점을 실행하려면 대신 GemHostWorker 또는 GemEquipmentWorker를 사용합니다.
모든 호출은 내부 잠금으로 직렬화됩니다. 따라서 여러 스레드에서 끝점을 호출할 수 있지만 호출이 동시에 실행되지는 않습니다. 액티브 연결 시도 중에는 GemEndpoint.Poll이 최대 HsmsOptions.ConnectTimeoutMilliseconds 동안 차단될 수 있습니다.
정상적으로 종료하려면 GemEndpoint.Stop을 호출하고, GemEndpoint.GetTransportState가 닫힘 상태를 보고할 때까지 폴링과 이벤트 꺼내기를 계속한 다음, GemEndpoint.Dispose를 호출합니다. 이미 반환된 이벤트와 결과는 자체 데이터를 소유하므로 끝점을 해제한 뒤에도 유효합니다.
멤버
BeginCommunication
메서드
GEM 통신을 시작하기 위해 S1F13(Establish Communications Request)을 보냅니다.
public HsmsToken BeginCommunication()GemCommunicationState.NotCommunicating에서만 허용되며, 호출 후 상태는 GemCommunicationState.WaitingAck가 됩니다. 호스트는 빈 리스트 본문을 보내고, 장비는 모델(MDLN)과 소프트웨어 리비전(SOFTREV)을 보냅니다.
반환값
요청의 토큰입니다. S1F14 응답은 이 토큰이 있는 GemResult로 도착합니다.
참고
ObjectDisposedException예외: 끝점이 해제되었습니다.PdcommException예외: 요청을 보내지 않았습니다. 다른 통신 상태이면PdcommStatus.InvalidState이고, 대기 요청 슬롯 32개가 모두 사용 중이거나 보류된 전송 이벤트를 먼저 읽어야 하면PdcommStatus.Backpressure입니다.
Cancel
메서드
대기 중인 거래를 취소합니다.
public bool Cancel(HsmsToken token)취소된 GEM 요청은 나중에 코드가 HsmsFailureReason.Cancelled인 GemResultKind.Failed 결과로 완료됩니다.
매개변수
| 이름 | 설명 |
|---|---|
token | 요청을 제출할 때 반환된 토큰입니다. |
반환값
거래가 대기 중이었고 이제 취소되었으면 true입니다.
참고
ObjectDisposedException예외: 끝점이 해제되었습니다.PdcommException예외: 네이티브 호출이 실패했습니다.
Deselect
메서드
HSMS Deselect.req 제어 메시지를 보냅니다.
public HsmsToken Deselect()반환값
이후 이벤트에서 제어 거래를 식별하는 토큰입니다.
참고
ObjectDisposedException예외: 끝점이 해제되었습니다.PdcommException예외: 전송이 요청을 수락할 수 없었습니다.
Dispose
메서드
정상적인 전송 종료 절차 없이 네이티브 끝점을 해제합니다.
public void Dispose()이미 반환된 이벤트와 결과는 계속 유효합니다.
GetLocalAddress
메서드
숫자 로컬 소켓 주소를 가져옵니다. 예를 들어 패시브 끝점의 바인딩된 주소입니다.
public string GetLocalAddress()반환값
IP:port 텍스트로 표현한 로컬 주소입니다.
참고
ObjectDisposedException예외: 끝점이 해제되었습니다.PdcommException예외: 네이티브 호출이 실패했습니다.InvalidOperationException예외: 읽는 동안 네이티브 주소 크기가 바뀌었습니다.
GetState
메서드
GEM 상태의 스냅샷을 가져옵니다.
public GemState GetState()반환값
현재 GEM 상태입니다.
참고
ObjectDisposedException예외: 끝점이 해제되었습니다.PdcommException예외: 네이티브 호출이 실패했습니다.
GetTransportState
메서드
기본 전송의 HSMS 연결 상태를 가져옵니다.
public HsmsState GetTransportState()반환값
현재 전송 상태입니다.
참고
ObjectDisposedException예외: 끝점이 해제되었습니다.PdcommException예외: 네이티브 호출이 실패했습니다.
HandleEvent
메서드
GEM 계층으로 전송 이벤트 하나를 처리합니다.
public GemResult HandleEvent(HsmsEvent tcpEvent)GEM은 상태를 갱신하고, 자동 응답을 보내며, 응답과 실패를 대기 중인 GEM 요청과 연결합니다. GEM 트래픽이 아닌 이벤트는 GemResultKind.Ignored 결과를 만듭니다. 각 이벤트는 한 번만 처리할 수 있습니다. 처리한 뒤에도 이벤트를 읽을 수 있으며, 결과와 별개로 해제할 수 있습니다.
결과는 데이터의 스냅샷을 소유하므로 이벤트와 끝점을 해제한 뒤에도 유효합니다.
매개변수
| 이름 | 설명 |
|---|---|
tcpEvent | 이 끝점의 GemEndpoint.NextEvent가 반환한 이벤트입니다. |
반환값
호출자가 소유하며 해제해야 하는 새 GemResult입니다. GemResult.GetInfo로 검사합니다.
참고
ArgumentNullException예외:tcpEvent가null입니다.ObjectDisposedException예외: 끝점 또는tcpEvent가 해제되었습니다.PdcommException예외: 이벤트를 처리할 수 없었습니다. 이미 처리되었거나 다른 끝점 또는 이전 연결에 속하면PdcommStatus.StaleToken입니다.PdcommStatus.AllocationFailed또는PdcommStatus.Backpressure이면 이벤트를 다시 처리할 수 있습니다.
IsPending
메서드
거래가 아직 응답을 기다리는지 여부를 가져옵니다.
public bool IsPending(HsmsToken token)매개변수
| 이름 | 설명 |
|---|---|
token | 요청을 제출할 때 반환된 토큰입니다. |
반환값
거래가 대기 중이면 true입니다.
참고
ObjectDisposedException예외: 끝점이 해제되었습니다.PdcommException예외: 네이티브 호출이 실패했습니다.
Linktest
메서드
HSMS Linktest.req 제어 메시지를 보냅니다.
public HsmsToken Linktest()반환값
이후 이벤트에서 제어 거래를 식별하는 토큰입니다.
참고
ObjectDisposedException예외: 끝점이 해제되었습니다.PdcommException예외: 전송이 요청을 수락할 수 없었습니다.
NextEvent
메서드
끝점 큐에서 다음 전송 이벤트를 꺼냅니다.
public HsmsEvent? NextEvent()반환된 모든 이벤트를 다음 이벤트를 처리하기 전에 GemEndpoint.HandleEvent에 전달해야 합니다. 큐가 비어 있다고 세션이 끝났다는 뜻은 아닙니다.
반환값
다음 이벤트이거나, 큐가 비어 있으면 null입니다. 호출자가 소유하며 해제해야 합니다.
참고
ObjectDisposedException예외: 끝점이 해제되었습니다.PdcommException예외: 네이티브 호출이 실패했습니다. 예를 들면PdcommStatus.AllocationFailed입니다. 이벤트는 유지되며 다음 호출에서 반환됩니다.
Poll
메서드
연결, 읽기, 쓰기, 타이머 검사 같은 대기 중인 전송 작업을 수행합니다.
public nuint Poll()액티브 연결 시도 중에는 최대 HsmsOptions.ConnectTimeoutMilliseconds 동안 차단될 수 있습니다. HsmsEndpoint.Poll을 참고합니다.
반환값
수행한 내부 동작의 수입니다. 생성된 이벤트의 수가 아닙니다.
참고
ObjectDisposedException예외: 끝점이 해제되었습니다.PdcommException예외: 네이티브 전송이 실패했습니다. 예를 들면PdcommStatus.Backpressure입니다.
ReplyRaw
메서드
수신한 1차 메시지에 원시 SECS-II 응답을 보냅니다.
public void ReplyRaw(HsmsEvent primary, byte stream, byte function, bool replyExpected, ReadOnlySpan<byte> body)GEM이 GemResultKind.Unhandled로 보고한 1차 메시지에 응답할 때 이 메서드를 사용합니다.
매개변수
| 이름 | 설명 |
|---|---|
primary | 응답할 수신 1차 메시지 이벤트입니다. |
stream | 응답의 SECS-II 스트림 번호입니다. |
function | 응답의 SECS-II 펑션 번호이거나, 거래를 중단하려면 0입니다. |
replyExpected | 응답에 응답 요청(W) 비트를 설정할지 여부입니다. 응답에는 보통 설정하지 않습니다. |
body | 인코딩된 완전한 SECS-II 아이템 하나이거나, 헤더만 있는 응답이면 빈 범위입니다. |
참고
ArgumentNullException예외:primary가null입니다.ObjectDisposedException예외: 끝점 또는primary가 해제되었습니다.PdcommException예외: 전송이 응답을 거부했습니다. 예를 들어 1차 메시지에 이미 응답했거나 이전 연결에 속하면PdcommStatus.StaleToken입니다.
RequestRaw
메서드
GEM이 추적하지 않는 원시 SECS-II 1차 메시지를 보냅니다.
public HsmsToken RequestRaw(byte stream, byte function, bool replyExpected, ReadOnlySpan<byte> body)본문은 메서드가 반환되기 전에 복사됩니다. 성공은 전송이 메시지를 수락했다는 뜻이며 응답이 도착했다는 뜻이 아닙니다. 응답은 GemEndpoint.HandleEvent가 GemResultKind.Ignored 결과로 보고하며, HsmsEvent에서 읽습니다.
매개변수
| 이름 | 설명 |
|---|---|
stream | SECS-II 스트림 번호입니다. |
function | SECS-II 펑션 번호입니다. 1차 메시지는 홀수를 사용합니다. |
replyExpected | 메시지에 응답 요청(W) 비트를 설정할지 여부입니다. |
body | 인코딩된 완전한 SECS-II 아이템 하나이거나, 헤더만 있는 메시지이면 빈 범위입니다. |
반환값
이후 이벤트에서 거래를 식별하는 토큰입니다.
참고
ObjectDisposedException예외: 끝점이 해제되었습니다.PdcommException예외: 전송이 메시지를 수락할 수 없었습니다. 예를 들어 한도를 초과했습니다.
Select
메서드
HSMS Select.req 제어 메시지를 보냅니다.
public HsmsToken Select()반환값
이후 이벤트에서 제어 거래를 식별하는 토큰입니다.
참고
ObjectDisposedException예외: 끝점이 해제되었습니다.PdcommException예외: 전송이 요청을 수락할 수 없었습니다.
Start
메서드
HSMS 전송을 시작합니다. 액티브 끝점은 연결을 시작하고 패시브 끝점은 수신 대기를 시작합니다.
public void Start()HsmsEndpoint.Start를 참고합니다.
참고
ObjectDisposedException예외: 끝점이 해제되었습니다.PdcommException예외: 네이티브 전송이 호출을 거부했습니다.
Stop
메서드
HSMS 전송 닫기를 시작합니다. 상태가 닫힘을 보고할 때까지 폴링과 이벤트 꺼내기를 계속해야 합니다.
public void Stop()HsmsEndpoint.Stop을 참고합니다.
참고
ObjectDisposedException예외: 끝점이 해제되었습니다.PdcommException예외: 네이티브 전송이 호출을 거부했습니다.
FormattedPrograms
속성
이 끝점의 정형 프로세스 프로그램 서비스를 가져옵니다.
public GemFormattedPrograms FormattedPrograms { get; }접근할 때마다 새 경량 객체를 만듭니다. 이 객체는 네이티브 리소스를 보유하지 않으므로 해제할 필요가 없으며, 메서드는 다른 끝점 메서드와 같은 내부 잠금을 사용합니다.
반환값
이 끝점에서 동작하는 새 GemFormattedPrograms 객체입니다.
참고
NotSupportedException예외: 로드된 네이티브 라이브러리가 정형 프로세스 프로그램 함수를 내보내지 않습니다.