Rev 739 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | SVN | RSS feed
| Rev 739 | Rev 742 | ||
|---|---|---|---|
| Line 1... | Line 1... | ||
| 1 | ########################################################### |
1 | ########################################################### |
| 2 | # |
2 | # |
| 3 | # Node interface through raw TCP socket (telnet) |
3 | # Node interface through raw TCP socket (telnet) |
| 4 | # |
4 | # |
| 5 | ########################################################### |
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 |
|
| 6 | 52 | ||
| 7 | class NodeIfTelnet: |
53 | class NodeIfTelnet: |
| 8 | config = [] |
54 | config = [] |
| 9 | pktHandler = None |
55 | pktHandler = None |
| - | 56 | telThread = None |
|
| 10 | 57 | ||
| 11 | def __init__(self, cfg, pktHandler): |
58 | def __init__(self, cfg, pktHandler): |
| 12 | self.config = cfg |
59 | self.config = cfg |
| 13 | self.pktHandler = pktHandler |
60 | self.pktHandler = pktHandler |
| 14 | 61 | ||
| 15 | def setPktHandler(self, pktHandler): |
62 | def setPktHandler(self, pktHandler): |
| 16 | self.pktHandler = pktHandler |
63 | self.pktHandler = pktHandler |
| 17 | 64 | ||
| 18 | def start(self): |
65 | def start(self): |
| - | 66 | self.telThread = TelnetThread(self.pktHandler, self.ifNotifier, socket) |
|
| - | 67 | self.telThread.start() |
|
| 19 | |
68 | return True |
| 20 | 69 | ||
| 21 | def stop(self): |
70 | def stop(self): |
| - | 71 | if self.running(): |
|
| - | 72 | self.telThread.terminate() |
|
| 22 | |
73 | else: |
| - | 74 | log.debug('Telnet interface not started, or already stopped') |
|
| 23 | 75 | ||
| 24 | def running(self): |
76 | def running(self): |
| - | 77 | if self.telThread is not None: |
|
| - | 78 | return not self.telThread.terminated |
|
| 25 | |
79 | else: |
| - | 80 | return False |
|