All pastes #17631 Raw Edit

Something

public text v1 · immutable
#17631 ·published 2005-07-13 16:34 UTC
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