87 lines
3.4 KiB
Python
87 lines
3.4 KiB
Python
import card
|
|
import game
|
|
from room import Room, sendTo
|
|
|
|
import asyncio
|
|
import datetime
|
|
import random
|
|
import websockets
|
|
|
|
|
|
connected = {-1: []}
|
|
character = dict()
|
|
name=["安","圭月","梅","小兔","銀","正作","W","桑德","海爾","雪村"]
|
|
|
|
for i in range(len(name)):
|
|
character[str(i+1)] = name[i]
|
|
|
|
async def handler(websocket, path):
|
|
global connected
|
|
# Register.
|
|
connected[-1].append(websocket)
|
|
websocket.status = Room.CONNECTED
|
|
await websocket.send("CHOOSE CHARACTER")
|
|
try:
|
|
# Implement logic here.
|
|
while 1:
|
|
message = await websocket.recv()
|
|
if websocket.status == Room.CONNECTED: # choose character
|
|
choice = message
|
|
while choice not in map(lambda x : str(x+1),list(range(len(name)))):
|
|
await websocket.send("CHOOSE")
|
|
await websocket.send("CHOOSE: "+ str(choice) + "\n" + str(list(range(len(name)))))
|
|
choice = await websocket.recv()
|
|
p_name = character[choice]
|
|
await websocket.send("PLAYER "+p_name)
|
|
websocket.player = game.Player(p_name,card.default_deck)
|
|
|
|
websocket.status = Room.MATCHING
|
|
|
|
elif websocket.status == Room.MATCHING:
|
|
try:
|
|
room_id = int(message)
|
|
connected[room_id] = connected.get(room_id, Room(room_id))
|
|
|
|
count = connected[room_id].count()
|
|
|
|
if count <= 1: # Enter the room
|
|
connected[room_id].player_add(websocket)
|
|
connected[-1].remove(websocket)
|
|
await websocket.send("You have entered room "+ str(connected[room_id]))
|
|
websocket.room = room_id
|
|
|
|
if count+1 == 1: # 該玩家已加入房間
|
|
await websocket.send("Waiting for another player...")
|
|
else:
|
|
for ws in connected[room_id]:
|
|
ws.status = Room.PLAYING
|
|
await ws.send("The game will start soon.....")
|
|
# await connected[room_id].start()
|
|
# Testing
|
|
|
|
else: # Can't enter the room
|
|
await websocket.send("SAD, This room is full. Please enter another room.")
|
|
except Exception as e:
|
|
print(e)
|
|
print("STATUS = MATCHING")
|
|
elif websocket.status == Room.PLAYING:
|
|
print("STATUS = PLAYING, message got")
|
|
for ws in connected[websocket.room]:
|
|
await ws.send("STARTING... But unfortunately, we haven't completed this part of code.")
|
|
print("STATUS = PLAYING, message sent")
|
|
|
|
finally:
|
|
# Unregister.
|
|
connected[websocket.room].player_delete(websocket)
|
|
print(connected)
|
|
|
|
|
|
|
|
"""cert = ssl.SSLContext()
|
|
cert.load_cert_chain("/etc/letsencrypt/live/stoneapp.tech/fullchain.pem","/etc/letsencrypt/live/stoneapp.tech/privkey.pem")
|
|
start_server = websockets.serve(handler, '10.128.0.2', 8787,ssl=cert)"""
|
|
|
|
start_server = websockets.serve(handler, '127.0.0.1', 9000)
|
|
asyncio.get_event_loop().run_until_complete(start_server)
|
|
asyncio.get_event_loop().run_forever()
|