Subversion Repositories HomeAutomation

Rev

Rev 742 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | SVN | RSS feed

Rev 742 Rev 743
Line 15... Line 15...
15
   
15
   
16
    def __init__ (self, sock, ownerNotifier):
16
    def __init__ (self, sock, ownerNotifier):
17
        Thread.__init__(self)
17
        Thread.__init__(self)
18
        self.sock = sock
18
        self.sock = sock
19
        self.ownerNotifier = ownerNotifier
19
        self.ownerNotifier = ownerNotifier
-
 
20
        self.clientSocks = [] # may not be gc'd between instances of object
20
        self.clientSocksLock = Lock()
21
        self.clientSocksLock = Lock()
21
       
22
       
22
    def cleanup(self):
23
    def cleanup(self):
23
        self.sock.close()
24
        self.sock.close()
24
        self.clientSocksLock.acquire()
25
        self.clientSocksLock.acquire()
Line 101... Line 102...
101
    def running(self):
102
    def running(self):
102
        if self.serverThread is not None:
103
        if self.serverThread is not None:
103
            return not self.serverThread.terminated
104
            return not self.serverThread.terminated
104
        else:
105
        else:
105
            return False
106
            return False
-
 
107
       
-
 
108
    def getClients(self):
-
 
109
        return self.serverThread.clientSocks
106
 
110
 
107
    def readAll(self):
111
    def readAll(self):
108
        cldata = []
112
        cldata = []
109
        self.serverThread.clientSocksLock.acquire()
113
        self.serverThread.clientSocksLock.acquire()
110
        for clsock,addr in self.serverThread.clientSocks:
114
        for clsock,addr in self.serverThread.clientSocks:
111
            try:
115
            try:
112
                data = clsock.s.recv(1024)
116
                data = clsock.recv(1024)
113
            except Exception, e:
117
            except Exception, e:
114
                log.debug('TCPServer client socket error: ' + str(e))
118
                log.debug('TCPServer client ' + str(addr) + ' socket error: ' + str(e))
115
                self.serverThread.clientSocksLock.release()
119
                self.serverThread.clientSocksLock.release()
116
                return None
120
                return None
117
            cldata.append((addr, data))
121
            cldata.append((addr, data))
118
        self.serverThread.clientSocksLock.release()
122
        self.serverThread.clientSocksLock.release()
119
        return cldata
123
        return cldata
120
 
124
 
121
    def writeAll(self, data):
125
    def writeAll(self, data):
122
        self.serverThread.clientSocksLock.acquire()
126
        self.serverThread.clientSocksLock.acquire()
123
        for clsock,addr in self.serverThread.clientSocks:
127
        for clsock,addr in self.serverThread.clientSocks:
124
            try:
128
            try:
125
                clsock.send(data)
129
                clsock.send(data)
126
            except Exception, e:
130
            except Exception, e:
127
                log.debug('TCPServer client socket error: ' + str(e))
131
                log.debug('TCPServer client ' + str(addr) + ' socket error: ' + str(e))
128
                self.serverThread.clientSocksLock.release()
132
                self.serverThread.clientSocks.remove((clsock,addr))
129
                return None
-
 
130
        self.serverThread.clientSocksLock.release()
133
                self.serverThread.clientSocksLock.release()
131
 
-
 
-
 
134
                return False
-
 
135
        self.serverThread.clientSocksLock.release()
-
 
136
        return True