-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathClient.py
More file actions
184 lines (146 loc) · 5.06 KB
/
Client.py
File metadata and controls
184 lines (146 loc) · 5.06 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
import atexit
import socket
import Packet
import time
import sys
import threading
import pygame
import Player
import Duck
import Animal
import gui
import string
UDP_IP = "178.62.91.20"
#UDP_IP = "127.0.0.1"
UDP_PORT = 1331
print "UDP target IP:", UDP_IP
print "UDP target port:", UDP_PORT
isHost = False
isWaiting = True
isServerReady = False
sock = socket.socket(socket.AF_INET, # Internet
socket.SOCK_DGRAM) # UDP
username = "username_default"
players = []
numOfEntities = 0
def sendDataToServer(data):
global timeLast
#print "Sending:",data
sock.sendto(data, (UDP_IP, UDP_PORT))
def getPacket(data):
iD = data[:2]
return iD
def parsePacket(data,addr):
global timeLast,username,isWaiting,isHost,isServerReady
if data=="You Are Host":
isHost=True
return
packetType = getPacket(data)
if packetType=='00':
isWaiting = False
loginP = Packet.Packet00Login()
loginP.receivePacket(data)
if loginP.username != username:
for p in players:
if p.username == loginP.username:
return
addPlayer(loginP.username,int(loginP.x),int(loginP.y))
else:
if len(players)==0:
isHost = True
print "YOU ARE HOST!"
print loginP.username,"connected to the server!"
elif packetType=='01':
print "disconnect"
dis = Packet.Packet01Disconnect()
dis.receivePacket(data)
for p in players:
if p.username == dis.username:
players.remove(p)
elif packetType=='02':
move = Packet.Packet02Move()
move.receivePacket(data)
for pl in players:
if move.username == pl.username:
pl.x = int(move.x)
pl.y = int(move.y)
pl.movingDir = int(move.movingDir)
pl.isSwimming = move.isSwimming =="true"
return
if move.username!=username:
addPlayer(move.username,int(move.x),int(move.y))
elif packetType == '03':
ent = Packet.Packet03AddEntity()
ent.receivePacket(data)
addEntity(ent.type,ent.x,ent.y)
elif packetType == '04':
move = Packet.Packet04MoveEntity()
move.receivePacket(data)
gui.level.entities[int(move.id)].x = int(move.x)
gui.level.entities[int(move.id)].y = int(move.y)
gui.level.entities[int(move.id)].movingDir = int(move.movingDir)
gui.level.entities[int(move.id)].isSwimming = move.isSwimming =="true"
elif packetType == '05':
tiles = Packet.Packet05SendTiles()
tiles.receivePacket(data)
setTiles(tiles.tiles)
print "Got tiles"
elif packetType == '06' and isHost==False:
tile = Packet.Packet06UpdateTile()
tile.receivePacket(data)
gui.level.tiles[int(tile.x)+(gui.level.width*int(tile.y))] = int(tile.tile)
gui.level.hasChanged = True
def setTile(tile,x,y):
send = Packet.Packet06UpdateTile(tile,x,y)
sendDataToServer(send.getData())
def setTiles(tiles):
tiles = string.split(tiles,",")
for t in tiles:
try:
gui.level.tiles.append(int(t))
except ValueError:
pass
def sendTiles(tiles):
send = Packet.Packet05SendTiles(tiles)
sendDataToServer(send.getData())
def addPlayer(usename,x,y):
pl = PlayerMP(usename,x,y)
players.append(pl)
def addEntity(e,x,y):
print e
if e == "Duck":
d = Duck.Duck(gui.level,int(x),int(y))
elif e == "Crab":
d = Animal.Animal(gui.level,int(x),int(y))
gui.level.entities.append(d)
def sendEntity(e,x,y):
global numOfEntities
ent = Packet.Packet03AddEntity(numOfEntities,e,x,y)
numOfEntities+=1
sendDataToServer(ent.getData())
def moveEntity(id,x,y,movingDir,isSwimming):
move = Packet.Packet04MoveEntity(id,x,y,movingDir,isSwimming)
sendDataToServer(move.getData())
def waitForPacket():
while True:
data, addr = sock.recvfrom(4096)
parsePacket(data, addr)
def move(x,y,direction,isSwimming):
global username
move = Packet.Packet02Move(username,x,y,direction,isSwimming)
sendDataToServer(move.getData())
def login(user,x,y):
global username,isServerReady
print "Tring to login",user
username = user
login = Packet.Packet00Login(user,x,y)
sendDataToServer(login.getData())
t = threading.Thread(target=waitForPacket)
t.start()
def disconnect():
disconnect = Packet.Packet01Disconnect(username)
sendDataToServer(disconnect.getData())
print "Disconnected from server!"
class PlayerMP(Player.Player):
def __init__(self,username,x,y):
super(PlayerMP,self).__init__(None,username,x,y)