Guest User

Untitled

a guest
Jul 26th, 2018
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.70 KB | None | 0 0
  1. -----Main.py---------------
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8. import socket
  9. from Model import Player
  10. global host
  11. global port
  12.  
  13.  
  14. host = 'localhost'
  15. port = 43593
  16. s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  17. s.bind((host,port))
  18. s.listen(5)
  19. print "Listening on port", port
  20. while 1:
  21. client, address = s.accept()
  22. player = Player(client)
  23. player.start()
  24.  
  25.  
  26.  
  27.  
  28.  
  29.  
  30.  
  31.  
  32. --------Model.py----------
  33.  
  34.  
  35.  
  36.  
  37. from threading import Thread
  38. from Sender import Sender
  39. import random
  40. import struct
  41.  
  42.  
  43. class Player(Thread):
  44.  
  45. def __init__(self, sock):
  46. Thread.__init__(self)
  47. self.socket = sock
  48.  
  49. socket = None
  50. sessionID = -1
  51. clientVer = -1
  52. username = ""
  53. password = ""
  54. sender = None
  55.  
  56. def run(self):
  57. self.sender = Sender(self)
  58. print "Connection made!"
  59. while 1:
  60. data = self.socket.recv(1024)
  61. if data:
  62.  
  63. id = struct.unpack('b', data[2])[0]
  64. b1 = struct.unpack('b', data[0])[0]
  65. b2 = struct.unpack('b', data[1])[0]
  66. len = (((b1 & 0xff) << 8) | (b2 & 0xff))
  67. self.handle_packet(id, len, data)
  68.  
  69. elif not data:
  70. print "Someone DCed"
  71.  
  72. def get_login_response(self):
  73. #do username & password, server full etc checks here.
  74. return 0
  75.  
  76. def handle_packet(self, id, length, data):
  77. print "Recv:", id, "Len:", len
  78.  
  79. if id == 32:
  80. self.sessionID = random.getrandbits(55)
  81. self.socket.sendall(struct.pack('q', self.sessionID))
  82. elif id == 0:
  83. index = 4
  84. self.clientVer = struct.unpack('>h', data[index:6])[0]
  85. index += 2
  86. nextLen = struct.unpack('b', data[index])[0]
  87. index += 1
  88. self.username = data[index:index + nextLen].strip()
  89. print self.username
  90. index += nextLen
  91. nextLen = struct.unpack('b', data[index])[0]
  92. index += 1
  93. self.password = data[index:index + nextLen].strip()
  94. index += nextLen
  95.  
  96. print self.username, "has logged in"
  97. self.sender.send_world()
  98. self.socket.sendall(struct.pack('b', self.get_login_response()))
  99.  
  100.  
  101.  
  102.  
  103.  
  104.  
  105.  
  106.  
  107.  
  108. ----Sender.py---------
  109.  
  110.  
  111.  
  112.  
  113.  
  114.  
  115.  
  116.  
  117. import struct
  118.  
  119. class Sender(object):
  120.  
  121. player = None
  122.  
  123. def __init__(self, play):
  124. self.player = play
  125.  
  126. def send_world(self):
  127.  
  128. #self.player.socket
  129. # len 13
  130. #0 is index OK!
  131. len = 13
  132. id = 131
  133. packer = struct.pack('B', len >> 8)
  134. packer += struct.pack('B', len)
  135. packer += struct.pack('B', id)
  136. packer += struct.pack('>h', 0)
  137. packer += struct.pack('>h', 2304)
  138. packer += struct.pack('>h', 1776)
  139. packer += struct.pack('>h', 1)
  140. packer += struct.pack('>h', 944)
  141. self.player.socket.sendall(packer)
  142. print "sent packet!"
  143. return None
  144.  
  145.  
  146. #not complete
  147. def send_location(self):
  148.  
  149. #self.player.socket
  150. # len 13
  151. #0 is index OK!
  152. len = 13
  153. id = 131
  154. packer = struct.pack('>h', len)
  155. packer += struct.pack('B', id)
  156. packer += struct.pack('>h', 0)
  157. packer += struct.pack('>h', 2304)
  158. packer += struct.pack('>h', 1776)
  159. packer += struct.pack('>h', 1)
  160. packer += struct.pack('>h', 944)
  161. print packer
  162. self.player.socket.sendall(packer)
  163. print "sent packet!"
  164.  
  165. return None
Add Comment
Please, Sign In to add comment