forked from tailhook/battleship
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathserver.nim
61 lines (50 loc) · 1.71 KB
/
server.nim
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
import sockets
import websockets
import jester
import asyncio
import json
type Game = object of RootObj
first*: WebSocket
second*: WebSocket
var queued: WebSocket = nil
var games: Table[int, Game] = initTable[int, Game]()
var game_num: int = 1
proc onConnected(ws: WebSocketServer, client: WebSocket, message: WebSocketMessage) =
echo "------ connected ------"
if queued.isNil:
queued = client
ws.send(client, pretty(%*["queued"]))
else:
games.add(game_num, Game(first: queued, second: client))
game_num += 1
ws.send(queued, pretty(%*["commenced"]))
ws.send(client, pretty(%*["commenced"]))
queued = nil
proc onMessage(ws: WebSocketServer, client: WebSocket, message: WebSocketMessage) =
echo "message: ", message.data
proc onDisconnected(ws: WebSocketServer, client: WebSocket, message: WebSocketMessage) =
echo "client left, remaining: ", ws.clients.len
if queued == client:
echo "removing queued"
queued = nil
else:
echo "checking games"
for id, game in pairs(games):
if game.first == client:
ws.send(game.second, pretty(%*["peer_disconnected"]))
elif game.second == client:
ws.send(game.first, pretty(%*["peer_disconnected"]))
del games, id
echo "Running websocket test"
#Choose which type of websocket to test
var ws = open("", Port(8080), isAsync=true)
ws.onConnected = onConnected
ws.onMessage = onMessage
ws.onDisconnected = onDisconnected
let dispatch = newDispatcher()
dispatch.register(ws)
while true:
try:
discard dispatch.poll()
except KeyError:
echo "KeyError: ", getCurrentExceptionMsg()