rendered paste body
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