Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Všechna zařízení POS mají možnost generovat události nebo měnit stav nezávisle na aplikaci. Pokud například operátor odpojí zařízení PinPad , aplikace nemá přímý způsob zjištění této změny, protože se nejedná o změnu stavu požadovanou aplikací. Objekt služby musí mít nějaký způsob upozorňování aplikace na tyto změny stavu.
Multithreading
Vzhledem k tomu, že aplikace nepřetržitě dotazuje objekt služby pro aktuální stav, bude příliš nákladná, je potřeba další řešení. Řešením je obvykle vytvořit vlákno na pozadí pro monitorování zařízení.
Jak jsme ukázali v jiných příkladech, vytvoření vlákna čtečky je vždy nezbytné pro vstupní zařízení, jako jsou skenery nebo čtečky magnetického pruhu. U výstupních zařízení, jako jsou například zobrazení čar a tiskárny, je však často nutné sledovat změny stavu, jako je ztráta napájení nebo přechod do offline režimu, a pak odeslat událost StatusUpdateEvent do aplikace.
Tímto způsobem může objekt služby reagovat na požadavky z aplikace asynchronně monitorovat hardware.
Definování událostí
Události jsou mechanismus, kterým objekt služby upozorní aplikaci změny stavu v zařízení nebo přijetí nových dat.
Obecně platí, že událost je oznámení mezi jedním vláknem nebo procesem a jiným, ke kterému došlo. Konkrétně microsoft Point of Service for .NET (POS pro .NET) používá funkci delegátů .NET k doručování do aplikace.
Specifikace Unified Point of Service (UnifiedPOS) definuje sadu pěti událostí: DataEvent, DirectIOEvent, ErrorEvent, OutputCompleteEvent a StatusUpdateEvent. Každý objekt služby může být povolen pouze pro podporu podmnožinu těchto objektů. Přesný obsah dat také závisí na typu Objekt služby.
Fronty událostí
Když vytvoříte třídu Service Object odvozenou z jednoho z POS pro .NET Base třídy, události se neodesílají přímo z objektu služby do aplikace. Místo toho se události umístí do fronty spravované základní třídou. Vzhledem k tomu, že existují podmínky, které musí být splněny před doručením událostí do aplikace, kód v základní třídě odesílá události pouze v případě, že je to vhodné. Objekt služby nemusí znát frontu ani požadavky, které musí být splněny před spuštěním události. To výrazně usnadňuje zátěž vývojáře objektů služby.
Fronta událostí pracuje asynchronně pomocí vlastního vlákna. To znamená, že objekt služby nečeká na skutečné doručení události.
Přidání událostí do fronty
POS pro .NET Base třídy poskytují řadu způsobů, jak přidat událost do fronty v závislosti na objektu služby a typu události.
Mnoho základních tříd má pomocné metody pro zjednodušení řazení určitých událostí do fronty; nejčastěji dataEvent události. Například metodu MsrBase.GoodRead lze použít k zařazení události DataEvent po úspěšném přečtení karty. Podobně PosKeyboard.KeyDown zařadí do fronty DataEvent označující, že byla stisknuta klávesa.
Události mohou být také automaticky zařazeny do fronty základní třídou při změně určitého stavu. Pokud například objekt služby nastavil vlastnost Properties.CapPowerReporting , pak StatusUpdateEvent označující změnu napájení lze odeslat jednoduše nastavením Vlastnosti.PowerState vlastnost v objektu služby.
V případě potřeby může objekt služby konkrétně zařadit událost do fronty pomocí jakéhokoli přepsání QueueEvent . Nejčastěji se používá k odesílání directIOEvent. Vzhledem k tomu, že události DirectIOEvent jsou specifické pro dodavatele a specifické pro zařízení, není možné je použít k jejich zařadí do fronty.
Synchronní vstup
I když je většina vstupu zařízení asynchronně čtena objektem služby a následně odeslána do aplikace ve formě událostí, existují však instance, kde aplikace může požadovat data z objektu služby a ne vracet se, dokud nebudou data připravená nebo nedosáhl časový limit. Další informace o vstupech řízených událostmi najdete v tématu Správa událostí.