Subversion Repositories HomeAutomation

Rev

Details | Last modification | View Log | SVN | RSS feed

Rev Author Line No. Line
739 olof 1
###########################################################
2
#
3
# Node interface through raw TCP socket (telnet)
4
#
5
###########################################################
742 olof 6
import logging as log
7
from NodeIfBase import NodeIfBase
8
from threading import Thread
739 olof 9
 
742 olof 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
 
739 olof 53
class NodeIfTelnet:
54
    config = []
55
    pktHandler = None
742 olof 56
    telThread = None
739 olof 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):
742 olof 66
        self.telThread = TelnetThread(self.pktHandler, self.ifNotifier, socket)
67
        self.telThread.start()
68
        return True
739 olof 69
 
70
    def stop(self):
742 olof 71
        if self.running():
72
            self.telThread.terminate()
73
        else:
74
            log.debug('Telnet interface not started, or already stopped')
739 olof 75
 
76
    def running(self):
742 olof 77
        if self.telThread is not None:
78
            return not self.telThread.terminated
79
        else:
80
            return False