#start new thread for calling virtual functions? import thread, socket, sys class sockstream: def __del__(self): self.stop = True def accepted(self, conn, ip, port): pass def failedconnect(self): pass def disconnected(self): pass def connected(self): pass def gotmessage(self, message): pass def disconnect(self): self.stop = True def msgextract(self): print self.msglen, self.message if self.msglen==-1: if len(self.message)>=2: self.msglen = (ord(self.message[0]) << 8) + ord(self.message[1]) if self.msglen>-1: print self.message[0], self.message[1], ord(self.message[0]), ord(self.message[1]) print self.msglen if len(self.message)>=self.msglen: self.gotmessage(self.message[2:self.msglen]) self.message = self.message[self.msglen:] self.msglen=-1 if self.message: self.msgextract() def sockthread(self): try: self.socket.settimeout(1.0) self.message = "" self.msglen = -1 while not self.stop: try: a = self.socket.recv(10000) except socket.timeout: pass except: self.stop = True self.disconnected() break else: self.message += a self.msgextract() self.socket.close() self.disconnected() except: print sys.exc_type print sys.exc_value print sys.exc_traceback def __init__(self, conn=None): self.message = "" self.sep = "\r\n" self.socket = conn self.stop = False if conn: thread.start_new_thread(self.sockthread, ()) def connectthread(self, ip, port): try: self.socket.connect((ip, port)) except: self.failedconnect() else: self.connected() self.stop = False thread.start_new_thread(self.sockthread, ()) def acceptthread(self): try: while not self.stop: try: conn, address = self.socket.accept() except socket.timeout: continue except: print sys.exc_info() else: ip, port = address self.accepted(conn, ip, port) except: print sys.exc_type print sys.exc_value print sys.exc_traceback def listen(self, ip, port): self.socket = socket.socket() self.socket.bind((ip, port)) self.socket.listen(5) self.stop = False thread.start_new_thread(self.acceptthread, ()) def connect(self, ip, port): self.message = "" self.socket = socket.socket() thread.start_new_thread(self.connectthread, (ip, port)) def sendmsg(self, data): l = len(data)+2 self.socket.sendall(chr(l>>8)+chr(l & 255)+data)