-
Notifications
You must be signed in to change notification settings - Fork 0
/
server.py
147 lines (141 loc) · 5.36 KB
/
server.py
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
#!/usr/local/bin/python
# -*- coding: utf-8 -*-
import socket, select, netstream, random
user = [] #二人对战
pipeRandomHeight = [] #
battleSize = 2
if __name__ == "__main__":
s = socket.socket()
host = "127.0.0.1"
port = 1234
s.bind((host, port))
s.listen(4)
inputs = []
inputs.append(s)
while True:
rs, ws, es = select.select(inputs, [], [])
for r in rs:
if r is s:
# accept
c, addr = s.accept()
print 'Got connection from'+str(addr)
inputs.append(c)
user.append(c)
if len(user) == battleSize: # 游戏开始
# 准备pipeRandomHeight信息
pipeRandomHeight.append(random.randrange(0, 4))
pipeRandomHeight.append(random.randrange(0, 4))
pipeRandomHeight.append(random.randrange(0, 4))
# 准备sendData信息
sendData = {}
pipeData = {}
pipeData[0] = pipeRandomHeight[0]
pipeData[1] = pipeRandomHeight[1]
pipeData[2] = pipeRandomHeight[2]
sendData['pipe'] = pipeData
sendData['start'] = 1
sendData['size'] = battleSize
# 给user发送
for i in range(len(user)):
sendData['no'] = i
try:
netstream.send(user[i], sendData)
print 'send data to '+str(user[i].getpeername())+'\tdata is: '+str(sendData)
except Exception:
print 'Error: 游戏开始,给user'+i+'发送'
else:
# receive data
recvData = netstream.read(r)
print 'Read data from '+str(r.getpeername())+'\tdata is: '+str(recvData)
# socket关闭
if recvData == netstream.CLOSED:
print str(r.getpeername())+'disconnected'
inputs.remove(r)
user.remove(r)
else: # 根据收到的request发送response
# client请求pipeRandomHeight
if 'pipe' in recvData:
index = recvData['pipe']
# list里没有的话需要广播pipe信息,list里一旦添加就会广播,所以list里有的话说明已经广播过了
if index >= len(pipeRandomHeight):
sendData = {}
pipeData = {}
pipeRandomHeight.append(random.randrange(0, 4))
pipeData[index] = pipeRandomHeight[index]
sendData['pipe'] = pipeData
# 对玩家广播
for i in range(len(user)):
try:
netstream.send(user[i], sendData)
print 'send data to '+str(user[i].getpeername())+'\tdata is: '+str(sendData)
except Exception:
print 'Error: 给user'+i+'广播pipe信息'
# client通知自己的位置
if 'pos' in recvData:
pos = recvData['pos']
no = recvData['no']
sendData = {}
sendData['pos'] = pos
sendData['no'] = no
# 对玩家广播
for i in range(len(user)):
if i == no:
continue
try:
netstream.send(user[i], sendData)
print 'send data to '+str(user[i].getpeername())+'\tdata is: '+str(sendData)
except Exception:
print 'Error: 给user'+i+'广播pipe信息'
'''
sock = socket.socket()
sock.bind(('127.0.0.1', 1234))
sock.listen(1)
c, addr = sock.accept()
data = {}
dataPipe = {}
index = 0
data['start'] = 1
dataPipe[0] = 0
dataPipe[1] = 1
dataPipe[2] = 2
dataPipe[3] = 3
data['pipe'] = dataPipe
netstream.send(c, data)
print('done')
'''
'''
# test send
data = {}
data['login'] = 'chenchao'
data['wife'] = 'gongyilin'
#data['hobby'] = '看动画,听音乐,打篮球,玩游戏,哈哈哈'
data['pipe'] = {'index':15, 'random':3}
data['bird'] = {'1':111, '2':222, '3':333}
print("send data: "+str(data))
netstream.send(c, data)
#test read
data2 = netstream.read(c)
print("read data: "+str(data2))
if data2['login'] == 'chenchao':
print("end")
c.close()
sock.close()
'''
''' base64
s = "woshizifuchuan我是字符串"
a = base64.b64encode(s)
print a
b= base64.b64decode(a)
print b
'''
''' dict to json
data = {}
data['name'] = 'chen'
data['wife'] = 'gong'
data['pos'] = {1:154, 2:254, 3:354}
print data['pos'][1]
jsonData = json.dumps(data)
#print 'json data: '+str(jsonData)
data = json.loads(jsonData)
print data['pos']
'''