모든 POS 디바이스는 애플리케이션과 상관없이 이벤트를 생성하거나 상태를 변경할 수 있습니다. 예를 들어 운영자가 PinPad 디바이스를 분리하는 경우 애플리케이션에서 요청한 상태 변경이 아니기 때문에 애플리케이션에서 이 변경 사항을 직접 감지할 수 없습니다. 서비스 개체에는 이러한 상태 변경에 대해 애플리케이션에 경고하는 방법이 있어야 합니다.
다중 스레딩
애플리케이션이 현재 상태에 대해 서비스 개체를 지속적으로 폴링하는 것은 비용이 너무 많이 들기 때문에 다른 솔루션이 필요합니다. 일반적으로 솔루션은 디바이스를 모니터링하는 백그라운드 스레드를 만드는 것입니다.
다른 예제에서 볼 수 있듯이 스캐너 또는 자기 스트립 판독기 같은 입력 디바이스에는 항상 판독기 스레드를 만들어야 합니다. 그러나 선 표시 및 프린터와 같은 출력 디바이스의 경우 전원 손실 또는 오프라인 상태 변경과 같은 상태 변경을 감시한 다음, StatusUpdateEvent 이벤트를 애플리케이션에 보내는 데 두 번째 스레드가 필요한 경우가 많습니다.
이러한 방식으로 서비스 개체는 하드웨어를 비동기적으로 모니터링하는 동안 애플리케이션의 요청에 응답할 수 있습니다.
이벤트 정의
이벤트는 서비스 개체가 디바이스의 상태 변경 또는 새 데이터의 도착을 애플리케이션에 알리는 메커니즘입니다.
일반적으로 이벤트는 하나의 스레드 또는 프로세스와 다른 스레드(또는 프로세스) 간에 발생한 알림입니다. 좀 더 구체적으로 말하자면, .NET용 Microsoft POS(POS for .NET)는 .NET 대리자 기능을 사용하여 애플리케이션에 전달합니다.
UnifiedPOS(Unified Point Of Service) 사양은 DataEvent, DirectIOEvent, ErrorEvent, OutputCompleteEvent 및 StatusUpdateEvent의 5개 이벤트 집합을 정의합니다. 각 서비스 개체는 이러한 이벤트의 하위 집합만 지원하도록 허용할 수 있습니다. 데이터의 정확한 내용도 서비스 개체 유형에 따라 달라집니다.
이벤트 큐
.NET 용 POS Base 클래스 중 하나에서 파생된 Service Object 클래스를 만들 때 이벤트는 Service Object에서 애플리케이션으로 직접 전송되지 않습니다. 대신 이벤트는 Base 클래스에서 관리하는 큐에 배치됩니다. 이벤트가 애플리케이션에 전달되기 전에 충족해야 하는 조건이 있으므로 Base 클래스의 코드는 적절한 경우에만 이벤트를 디스패치합니다. 서비스 개체는 이벤트를 발생하기 전에 충족해야 하는 큐 또는 요구 사항을 인식할 필요가 없습니다. 이렇게 하면 서비스 개체 개발자의 부담이 크게 줄어듭니다.
이벤트 큐는 자체 스레드를 사용하여 비동기적으로 작동합니다. 즉, 서비스 개체는 해당 이벤트가 실제로 배달될 때까지 대기하지 않습니다.
큐에 이벤트 추가
.NET용 POS Base 클래스는 서비스 개체 및 이벤트 유형에 따라 큐에 이벤트를 추가하는 다양한 방법을 제공합니다.
많은 Base 클래스에는 특정 이벤트(가장 대표적인 예는 DataEvent 이벤트)의 큐를 간소화하는 도우미 메서드가 있습니다. 예를 들어 MsrBase.GoodRead 메서드를 사용하여 성공적으로 카드를 읽은 후 DataEvent 이벤트를 큐에 대기할 수 있습니다. 마찬가지로 PosKeyboard.KeyDown은 키를 눌렀음을 나타내는 DataEvent를 큐에 대기시킵니다.
특정 상태가 변경되면 Base 클래스에서 이벤트를 자동으로 큐에 대기할 수도 있습니다. 예를 들어 서비스 개체가 Properties.CapPowerReporting 속성을 설정한 경우 서비스 개체에서 Properties.PowerState 속성을 설정하기만 하면 전원 변경을 나타내는 StatusUpdateEvent를 보낼 수 있습니다.
마지막으로, Service 개체는 필요하다면 QueueEvent 재정의를 사용하여 이벤트를 특별히 큐에 대기할 수 있습니다. 무엇보다도 이 개체는 DirectIOEvent를 보내는 데 사용할 수 있습니다. DirectIOEvent 이벤트는 공급업체별 이벤트이며 디바이스별로 지정되므로 큐에 대기하는 데 제네릭 메커니즘을 사용할 수 없습니다.
동기 입력
대부분의 디바이스 입력은 서비스 개체에서 비동기적으로 읽은 다음 이벤트 형태로 애플리케이션에 디스패치되지만, 몇몇 인스턴스에서는 애플리케이션이 서비스 개체에서 데이터를 요청하고 데이터가 준비되거나 시간 제한에 도달할 때까지 반환하지 않을 수도 있습니다. 이벤트 기반 입력에 관한 자세한 내용은 이벤트 관리를 참조하세요.
참고 항목
작업
개념
기타 리소스
.NET