Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -----Main.py---------------
- import socket
- from Model import Player
- global host
- global port
- host = 'localhost'
- port = 43593
- s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- s.bind((host,port))
- s.listen(5)
- print "Listening on port", port
- while 1:
- client, address = s.accept()
- player = Player(client)
- player.start()
- --------Model.py----------
- from threading import Thread
- from Sender import Sender
- import random
- import struct
- class Player(Thread):
- def __init__(self, sock):
- Thread.__init__(self)
- self.socket = sock
- socket = None
- sessionID = -1
- clientVer = -1
- username = ""
- password = ""
- sender = None
- def run(self):
- self.sender = Sender(self)
- print "Connection made!"
- while 1:
- data = self.socket.recv(1024)
- if data:
- id = struct.unpack('b', data[2])[0]
- b1 = struct.unpack('b', data[0])[0]
- b2 = struct.unpack('b', data[1])[0]
- len = (((b1 & 0xff) << 8) | (b2 & 0xff))
- self.handle_packet(id, len, data)
- elif not data:
- print "Someone DCed"
- def get_login_response(self):
- #do username & password, server full etc checks here.
- return 0
- def handle_packet(self, id, length, data):
- print "Recv:", id, "Len:", len
- if id == 32:
- self.sessionID = random.getrandbits(55)
- self.socket.sendall(struct.pack('q', self.sessionID))
- elif id == 0:
- index = 4
- self.clientVer = struct.unpack('>h', data[index:6])[0]
- index += 2
- nextLen = struct.unpack('b', data[index])[0]
- index += 1
- self.username = data[index:index + nextLen].strip()
- print self.username
- index += nextLen
- nextLen = struct.unpack('b', data[index])[0]
- index += 1
- self.password = data[index:index + nextLen].strip()
- index += nextLen
- print self.username, "has logged in"
- self.sender.send_world()
- self.socket.sendall(struct.pack('b', self.get_login_response()))
- ----Sender.py---------
- import struct
- class Sender(object):
- player = None
- def __init__(self, play):
- self.player = play
- def send_world(self):
- #self.player.socket
- # len 13
- #0 is index OK!
- len = 13
- id = 131
- packer = struct.pack('B', len >> 8)
- packer += struct.pack('B', len)
- packer += struct.pack('B', id)
- packer += struct.pack('>h', 0)
- packer += struct.pack('>h', 2304)
- packer += struct.pack('>h', 1776)
- packer += struct.pack('>h', 1)
- packer += struct.pack('>h', 944)
- self.player.socket.sendall(packer)
- print "sent packet!"
- return None
- #not complete
- def send_location(self):
- #self.player.socket
- # len 13
- #0 is index OK!
- len = 13
- id = 131
- packer = struct.pack('>h', len)
- packer += struct.pack('B', id)
- packer += struct.pack('>h', 0)
- packer += struct.pack('>h', 2304)
- packer += struct.pack('>h', 1776)
- packer += struct.pack('>h', 1)
- packer += struct.pack('>h', 944)
- print packer
- self.player.socket.sendall(packer)
- print "sent packet!"
- return None
Add Comment
Please, Sign In to add comment