/// <summary> /// Raise tag lost event /// </summary> /// <param name="nfcTagType">NFC tag type</param> /// <param name="conn">Connection instance to NFC tag</param> private void OnTagLost(NfcTagType nfcTagType, NfcTagConnection conn) { TagLost?.Invoke(this, new NfcTagEventArgs(nfcTagType, conn)); }
protected void Poller() { SCW.SCARD_READERSTATE[] State = new SCW.SCARD_READERSTATE[1]; State[0].RdrName = this.Name; State[0].UserData = IntPtr.Zero; State[0].RdrCurrState = SCW.SCARD_STATE_UNKNOWN; int retCode; retCode = SCW.SCardGetStatusChange(hContext, 100, State, 1); if (retCode != SCW.SCARD_S_SUCCESS) { throw new Exception("Failed initial get status change: " + SCW.GetScardErrMsg(retCode)); } State[0].RdrCurrState = State[0].RdrEventState; while (!stopPollingSignal) { retCode = SCW.SCardGetStatusChange(hContext, 1000, State, 1); if (retCode == SCW.SCARD_E_TIMEOUT) { continue; } if (retCode != SCW.SCARD_S_SUCCESS) { throw new Exception("Failed cycling get status change: " + SCW.GetScardErrMsg(retCode)); } if (((State[0].RdrEventState & SCW.SCARD_STATE_PRESENT) == SCW.SCARD_STATE_PRESENT) && ((State[0].RdrEventState & SCW.SCARD_STATE_CHANGED) == SCW.SCARD_STATE_CHANGED)) { try { NFCTag tag = Connect(); foreach (Delegate d in TagFound.GetInvocationList()) { ISynchronizeInvoke syncer = d.Target as ISynchronizeInvoke; if (syncer != null) { syncer.BeginInvoke(d, new NFCTag[] { tag }); } else { d.DynamicInvoke(tag); } } } catch (Exception ex) { System.Diagnostics.Debug.WriteLine("Connect failed:" + ex.ToString()); } } else if (((State[0].RdrEventState & SCW.SCARD_STATE_EMPTY) == SCW.SCARD_STATE_EMPTY) && ((State[0].RdrEventState & SCW.SCARD_STATE_CHANGED) == SCW.SCARD_STATE_CHANGED)) { foreach (Delegate d in TagLost.GetInvocationList()) { ISynchronizeInvoke syncer = d.Target as ISynchronizeInvoke; if (syncer != null) { syncer.BeginInvoke(d, null); } else { d.DynamicInvoke(); } } } State[0].RdrCurrState = State[0].RdrEventState; } }