class bsock: tcp = "" tcpqueue = [] def __init__(self,chr = chr, len = len, ord = ord, str = str): import sys import socket import select import zlib self.tcp = socket.socket(socket.AF_INET,socket.SOCK_STREAM) self.tcp.setblocking(1) self.select = select self.zlib = zlib self.chr = chr self.len = len self.ord = ord self.str = str self.ID = [0,""] ###################################################### ##packet types self.PAC_GAME_MSG = 0 self.PAC_GAME_PMSG = 1 self.PAC_GAME_CMD = 2 self.PAC_AUTH_LOGIN = 64 self.PAC_AUTH_LOGINGOOD = 65 self.PAC_AUTH_LOGINBAD = 66 self.PAC_AUTH_LOGOUT = 67 self.PAC_AUTH_SERVERFULL = 68 self.PAC_OVERHEAD_KEEPALIVE = 128 self.PAC_OVERHEAD_TIMEOUT = 129 self.PAC_OVERHEAD_MALFORMED = 130 ###################################################### def connected(self): print "connected called" try: self.tcp.send("0") return 1 except: return 0 def connect(self,host,port): if self.connected() == 0: self.tcp.connect((host,port)) self.tcp.setblocking(0) print "Connected!" else: print "Already connected" def close(self): self.tcp.close() def run(self): self.Filter(self.readPacket()) for packet in self.tcpqueue: if packet != "": self.tcp.send(packet) print "Sending" self.tcpqueue = [] def newPacket(self,header, id, data): compressed_data = self.zlib.compress(data) compressed_header = self.chr(header) compressed_id = self.chr(id) if self.len(compressed_data) > 255: length1 = self.chr(255) length2 = self.chr(self.len(compressed_data) - 255) else: length1 = self.chr(self.len(compressed_data)) length2 = self.chr(0) packet = compressed_header + compressed_id + length1 + length2 + compressed_data self.tcpqueue.append(packet) def readPacket(self): try: header = self.tcp.recv(1) ID = self.tcp.recv(1) length = self.tcp.recv(2) except: #no data return [0,0,0] try: intlength = self.ord(length[0]) + self.ord(length[1]) except: return [0,0,0] try: data = self.tcp.recv(intlength) except: return [0,0,0] decompressed_data = self.zlib.decompress(data) filterfunc(header,ID,data) return [header,ID,decompresseed_data] def Filter(self,packet): if packet[0] != 0 and packet[1] != 0 and packet[2] != 0: header = packet[0] ID = packet[1] data = packet[2] if header == self.PAC_AUTH_LOGINGOOD: self.ID[0] = self.ord(data[0]) self.ID[1] = data[1] print "Logged om tp the room: " + self.ID[1] + " with the id of " + self.str(self.ID[0]) def dummy(a): pass GameLogic.BigSock = bsock() GameLogic.Dummy = dummy GameLogic.getCurrentController().getOwner().Connect = 1