mirror of
https://github.com/Lost-MSth/Arcaea-server.git
synced 2026-02-04 21:47:28 +08:00
114 lines
3.5 KiB
Python
114 lines
3.5 KiB
Python
from .sql import Connect
|
||
import base64
|
||
|
||
|
||
def get_song_unlock(client_song_map):
|
||
# 处理可用歌曲bit,返回bytes
|
||
|
||
user_song_unlock = [0] * 512
|
||
for i in range(0, 1024, 2):
|
||
x = 0
|
||
y = 0
|
||
if str(i) in client_song_map:
|
||
if client_song_map[str(i)][0]:
|
||
x += 1
|
||
if client_song_map[str(i)][1]:
|
||
x += 2
|
||
if client_song_map[str(i)][2]:
|
||
x += 4
|
||
if client_song_map[str(i)][3]:
|
||
x += 8
|
||
if str(i+1) in client_song_map:
|
||
if client_song_map[str(i+1)][0]:
|
||
y += 1
|
||
if client_song_map[str(i+1)][1]:
|
||
y += 2
|
||
if client_song_map[str(i+1)][2]:
|
||
y += 4
|
||
if client_song_map[str(i+1)][3]:
|
||
y += 8
|
||
|
||
user_song_unlock[i // 2] = y*16 + x
|
||
|
||
return bytes(user_song_unlock)
|
||
|
||
|
||
def create_room(conn, user_id, client_song_map):
|
||
# 创建房间,返回错误码和房间与用户信息
|
||
error_code = 108
|
||
|
||
with Connect() as c:
|
||
c.execute('''select name from user where user_id=?''', (user_id,))
|
||
x = c.fetchone()
|
||
if x is not None:
|
||
name = x[0]
|
||
|
||
song_unlock = get_song_unlock(client_song_map)
|
||
|
||
conn.send((1, name, song_unlock))
|
||
data = conn.recv()
|
||
if data[0] == 0:
|
||
error_code = 0
|
||
return error_code, {'roomCode': data[1],
|
||
'roomId': str(data[2]),
|
||
'token': str(data[3]),
|
||
'key': (base64.b64encode(data[4])).decode(),
|
||
'playerId': str(data[5]),
|
||
'userId': user_id,
|
||
'orderedAllowedSongs': (base64.b64encode(song_unlock)).decode()
|
||
}
|
||
|
||
return error_code, None
|
||
|
||
|
||
def join_room(conn, user_id, client_song_map, room_code):
|
||
# 加入房间,返回错误码和房间与用户信息
|
||
error_code = 108
|
||
|
||
with Connect() as c:
|
||
c.execute('''select name from user where user_id=?''', (user_id,))
|
||
x = c.fetchone()
|
||
if x is not None:
|
||
name = x[0]
|
||
|
||
song_unlock = get_song_unlock(client_song_map)
|
||
|
||
conn.send((2, name, song_unlock, room_code))
|
||
data = conn.recv()
|
||
if data[0] == 0:
|
||
error_code = 0
|
||
return error_code, {'roomCode': data[1],
|
||
'roomId': str(data[2]),
|
||
'token': str(data[3]),
|
||
'key': (base64.b64encode(data[4])).decode(),
|
||
'playerId': str(data[5]),
|
||
'userId': user_id,
|
||
'orderedAllowedSongs': (base64.b64encode(data[6])).decode()
|
||
}
|
||
else:
|
||
error_code = data[0]
|
||
|
||
return error_code, None
|
||
|
||
|
||
def update_room(conn, user_id, token):
|
||
# 更新房间,返回错误码和房间与用户信息
|
||
error_code = 108
|
||
|
||
conn.send((3, int(token)))
|
||
data = conn.recv()
|
||
if data[0] == 0:
|
||
error_code = 0
|
||
return error_code, {'roomCode': data[1],
|
||
'roomId': str(data[2]),
|
||
'token': token,
|
||
'key': (base64.b64encode(data[3])).decode(),
|
||
'playerId': str(data[4]),
|
||
'userId': user_id,
|
||
'orderedAllowedSongs': (base64.b64encode(data[5])).decode()
|
||
}
|
||
else:
|
||
error_code = data[0]
|
||
|
||
return error_code, None
|