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

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에서 읽습니다.

매개변수

이름설명
streamSECS-II 스트림 번호입니다.
functionSECS-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 예외: 로드된 네이티브 라이브러리가 정형 프로세스 프로그램 함수를 내보내지 않습니다.