Subversion Repositories HomeAutomation

Rev

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
        pass
68
        return True
20
 
69
 
21
    def stop(self):
70
    def stop(self):
-
 
71
        if self.running():
-
 
72
            self.telThread.terminate()
22
        pass
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
        pass
79
        else:
-
 
80
            return False