class Monitoring(Thread): def __init__(self, observer, reader): Thread.__init__(self) self.reader = reader self.observer = observer self.stopEvent = Event() self.stopEvent.clear() self.initializedEvent = Event() self.initializedEvent.clear() self.setDaemon(True) self.card = None def run(self): self.cardrequest = CardRequest(timeout=0.5, readers=[reader]) while not self.stopEvent.isSet(): try: card = self.cardrequest.waitforcardevent() if card != self.card: if not card: self.observer.removed() else: self.observer.inserted(card[0]) self.card = card self.initializedEvent.set() except Exception as e: print >> sys.stderr, "Connection error:", e
class __CardMonitoringThreadSingleton(Thread): """The real card monitoring thread class. A single instance of this class is created by the public CardMonitoringThread class. """ def __init__(self, observable): Thread.__init__(self) self.observable = observable self.stopEvent = Event() self.stopEvent.clear() self.cards = [] self.setDaemon(True) # the actual monitoring thread def run(self): """Runs until stopEvent is notified, and notify observers of all card insertion/removal. """ self.cardrequest = CardRequest(timeout=0.1) while self.stopEvent.isSet() != 1: try: currentcards = self.cardrequest.waitforcardevent() addedcards = [] for card in currentcards: if not self.cards.__contains__(card): addedcards.append(card) removedcards = [] for card in self.cards: if not currentcards.__contains__(card): removedcards.append(card) if addedcards != [] or removedcards != []: self.cards = currentcards self.observable.setChanged() self.observable.notifyObservers( (addedcards, removedcards)) # when CardMonitoringThread.__del__() is invoked in # response to shutdown, e.g., when execution of the # program is done, other globals referenced by the # __del__() method may already have been deleted. # this causes ReaderMonitoringThread.run() to except # with a TypeError or AttributeError except TypeError: pass except AttributeError: pass except: # FIXME Tighten the exceptions caught by this block traceback.print_exc() # stop the thread by signaling stopEvent def stop(self): self.stopEvent.set()
class __CardMonitoringThreadSingleton(Thread): """The real card monitoring thread class. A single instance of this class is created by the public CardMonitoringThread class. """ def __init__(self, observable): Thread.__init__(self) self.observable = observable self.stopEvent = Event() self.stopEvent.clear() self.cards = [] self.setDaemon(True) # the actual monitoring thread def run(self): """Runs until stopEvent is notified, and notify observers of all card insertion/removal. """ self.cardrequest = CardRequest(timeout=0.1) while self.stopEvent.isSet() != 1: try: currentcards = self.cardrequest.waitforcardevent() addedcards = [] for card in currentcards: if not self.cards.__contains__(card): addedcards.append(card) removedcards = [] for card in self.cards: if not currentcards.__contains__(card): removedcards.append(card) if addedcards != [] or removedcards != []: self.cards = currentcards self.observable.setChanged() self.observable.notifyObservers( (addedcards, removedcards)) # when CardMonitoringThread.__del__() is invoked in # response to shutdown, e.g., when execution of the # program is done, other globals referenced by the # __del__() method may already have been deleted. # this causes ReaderMonitoringThread.run() to except # with a TypeError or AttributeError except TypeError: pass except AttributeError: pass except: # FIXME Tighten the exceptions caught by this block traceback.print_exc() # stop the thread by signaling stopEvent def stop(self): self.stopEvent.set()
def removeAllCards(self): print('please remove all inserted smart cards') cardrequest = CardRequest() while True: cards = cardrequest.waitforcardevent() if 0 == len(cards): break time.sleep(.3) print('ok')
def removeAllCards(self): print 'please remove all inserted smart cards' cardrequest = CardRequest() while True: cards = cardrequest.waitforcardevent() if 0 == len(cards): break time.sleep(.3) print 'ok'
# # setup test first: detect current readers and cards # print('insert two smartcard readers') while True: readerz = readers() if 2 <= len(readerz): break time.sleep(.3) for reader in readerz: print('\t', reader) print('insert two cards in the readers') cardrequest = CardRequest() while True: cardz = cardrequest.waitforcardevent() if 2 <= len(cardz): break time.sleep(.3) for card in cardz: print('\t', toHexString(card.atr)) class testcase_manualCardRequest(unittest.TestCase, CardObserver): """Test case for CardRequest.""" def setUp(self): pass def tearDown(self): pass
# # setup test first: detect current readers and cards # print 'insert two smartcard readers' while True: readerz = readers() if 2 <= len(readerz): break time.sleep(.3) for reader in readerz: print '\t', reader print 'insert two cards in the readers' cardrequest = CardRequest() while True: cardz = cardrequest.waitforcardevent() if 2 <= len(cardz): break time.sleep(.3) for card in cardz: print '\t', toHexString(card.atr) class testcase_manualCardRequest(unittest.TestCase, CardObserver): """Test case for CardRequest.""" def setUp(self): pass def tearDown(self): pass