private void EnqueueItem(EventArguments dataEvent) { lock (locker) { _eventQueue.Enqueue(dataEvent); Monitor.Pulse(locker); } _uposProperties.FirePropertyChanged("DataCount"); }
/// <summary> /// Enqueues an event to be fired. Use only from OPOSBase /// </summary> /// <param name="dataEvent">The event to enqueue</param> internal void EnqueueEvent(EventArguments dataEvent) { if (!dataEvent.IsImmediate) { EnqueueItem(dataEvent); } else { FireEvent(dataEvent); } }
private void FireEvent(EventArguments enqueuedEvent) { if (enqueuedEvent is DataEventArguments arguments) { _uposProperties.FirePropertyChanged("DataCount"); _oposDevice.SOData(arguments.Status); } else if (enqueuedEvent is DirectIOEventArguments directIoEventArguments) { _oposDevice.SODirectIO(directIoEventArguments.EventNumber, ref directIoEventArguments.NumericData, ref directIoEventArguments.StringData); } else if (enqueuedEvent is ErrorEventArguments errorEventArguments) { _oposDevice.SOError((int)errorEventArguments.ResultCode, errorEventArguments.ResultCodeExtended, (int)errorEventArguments.ErrorLocus, ref errorEventArguments.ErrorResponse); } else if (enqueuedEvent is OutputCompleteEventArguments outputCompleteEventArguments) { _oposDevice.SOOutputComplete(outputCompleteEventArguments.OutputID); } else if (enqueuedEvent is StatusUpdateEventArguments statusUpdateEventArguments) { _oposDevice.SOStatusUpdate(statusUpdateEventArguments.Status); } }