def Receive(self): Log.Write('Receive thread started') partialline = '' self.State.Include('Rx') while not self.State.HasSignal('Shutdown'): sleep(0) try: s = self.State() self.State(s) if 'Connected' not in s: continue buf = self.recv(1024) linecomplete = buf.endswith('\n') lines = buf.split('\n') if partialline != '': lines[0] = partialline+lines[0] partialline = '' if linecomplete: if self.OnLineReceived is not None: self.OnLineReceived(lines) else: partialline = lines[-1] if len(lines) > 1: lines = lines[0:-1] if self.OnLineReceived is not None: self.OnLineReceived(lines) except error,value: Log.Write('Error: '+str(value),-1)
def Connect(self,address=None): if address is not None: self.Address = address try: Log.Write('Calling socket connect',1) self.connect(self.Address) self.State.Include('Connected') Log.Write('Connected to server',1) if self.OnConnect is not None: self.OnConnect() except error,value: self.State.Exclude('Connected') Log.Write('Error: '+str(value),5)
def Transmit(self): Log.Write('Transmit thread started') self.State.Include('Tx') while not self.State.HasSignal('Shutdown'): try: sleep(0) s = self.State() self.State(s) if 'Connected' not in s: continue line = self.txbuffer.Get() if line is not None: self.sendall(line+'\r\n') except error,value: Log.Write('Error: '+str(value))
def __init__(self,address=None): Log.Write('ClientLineSocket') self.Address = address socket.__init__(self,AF_INET,SOCK_STREAM) Log.Write('Parent socket created') self.txbuffer = LineBuffer() self.State = LockableSet() self.OnConnect = None self.OnDisconnect = None self.OnLineReceived = None thread.start_new_thread(self.Receive,()) thread.start_new_thread(self.Transmit,())
def Shutdown(self): Log.Write('ClientLineSocket: shutdown',1) self.State.Exclude('Connected') self.State.Include('Shutdown') self.shutdown(2) self.close() while self.State.HasSignal('Rx'): sleep(0) while self.State.HasSignal('Tx'): sleep(0)
def Request(self,req): socket = self.Connect() command,value = req.split('=') self.Write(socket,req) try: while True: res = self.Read(socket) Log.Write('Received: '+res) if res.find(command) <> -1: break finally: self.Disconnect(socket) return res.split('=')
def Disconnect(self,socket): Log.Write('Disconnecting') socket.shutdown(2) socket.close()
if partialline != '': lines[0] = partialline+lines[0] partialline = '' if linecomplete: if self.OnLineReceived is not None: self.OnLineReceived(lines) else: partialline = lines[-1] if len(lines) > 1: lines = lines[0:-1] if self.OnLineReceived is not None: self.OnLineReceived(lines) except error,value: Log.Write('Error: '+str(value),-1) self.State.Exclude('Rx') Log.Write('Receive shutting down') def Transmit(self): Log.Write('Transmit thread started') self.State.Include('Tx') while not self.State.HasSignal('Shutdown'): try: sleep(0) s = self.State() self.State(s) if 'Connected' not in s: continue line = self.txbuffer.Get() if line is not None: self.sendall(line+'\r\n') except error,value: