Subversion Repositories HomeAutomation

Rev

Rev 742 | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | SVN | RSS feed

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