Subversion Repositories HomeAutomation

Rev

Rev 742 | Blame | Compare with Previous | Last modification | View Log | SVN | RSS feed

  1. ###########################################################
  2. #
  3. # Node interface through raw TCP socket (telnet)
  4. #
  5. ###########################################################
  6. import logging as log
  7. from NodeIfBase import NodeIfBase
  8. from threading import Thread
  9.  
  10. class TelnetThread(Thread):
  11.     ownerNotifier = None
  12.     terminated = False
  13.     socket = None
  14.     pktHandler = None
  15.  
  16.     def __init__ (self, pktHandler, ownerNotifier, socket):
  17.         Thread.__init__(self)
  18.         self.pktHandler = pktHandler
  19.         self.ownerNotifier = ownerNotifier
  20.        
  21.     def cleanup(self):
  22.  #       self.port.close()
  23.         self.ownerNotifier.notify(self.ownerNotifier.TERMINATE)
  24.  
  25.     def run(self):
  26.         try:
  27.             log.debug('TelnetThread.run')
  28.             readBuffer = []
  29.                    
  30.             while not self.terminated:
  31.   #              inByte = self.port.read()
  32.   #              blocking read call??
  33.                 if inByte == '\n':
  34.                     msg = ''.join(readBuffer)
  35.                     readBuffer = []
  36.                     #print 'Incoming:', msg
  37.                     self.pktHandler.input(msg)
  38.                 else:
  39.                     readBuffer.append(inByte)
  40.    
  41.                 time.sleep(0.001)
  42.             self.cleanup()
  43.         except: # sys.excepthook does not work in threads
  44.             import traceback
  45.             traceback.print_exc()
  46.             self.terminated = True
  47.             self.cleanup()
  48.    
  49.     def terminate(self):
  50.         log.debug('TelnetThread.terminate')
  51.         self.terminated = True
  52.  
  53. class NodeIfTelnet:
  54.     config = []
  55.     pktHandler = None
  56.     telThread = None
  57.    
  58.     def __init__(self, cfg, pktHandler):
  59.         self.config = cfg
  60.         self.pktHandler = pktHandler
  61.        
  62.     def setPktHandler(self, pktHandler):
  63.         self.pktHandler = pktHandler
  64.    
  65.     def start(self):
  66.         self.telThread = TelnetThread(self.pktHandler, self.ifNotifier, socket)
  67.         self.telThread.start()
  68.         return True
  69.  
  70.     def stop(self):
  71.         if self.running():
  72.             self.telThread.terminate()
  73.         else:
  74.             log.debug('Telnet interface not started, or already stopped')
  75.    
  76.     def running(self):
  77.         if self.telThread is not None:
  78.             return not self.telThread.terminated
  79.         else:
  80.             return False
  81.