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 |
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. |
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 |
|