Geek7 commited on
Commit
7027d6e
·
verified ·
1 Parent(s): f9ac233

Update server.py

Browse files
Files changed (1) hide show
  1. server.py +6 -40
server.py CHANGED
@@ -1,12 +1,8 @@
1
  import random
2
  import json
3
  import socketio
4
- from flask import Flask, jsonify
5
  import eventlet
6
- import threading
7
- from nats.aio.client import Client as NATS
8
- import asyncpg
9
- import asyncio
10
 
11
  eventlet.monkey_patch()
12
 
@@ -14,39 +10,10 @@ sio = socketio.Server(cors_allowed_origins='*')
14
  app = Flask(__name__)
15
  app.wsgi_app = socketio.WSGIApp(sio, app.wsgi_app)
16
 
17
- DB_DSN = "postgresql://postgres:postgres@pgbouncer:6432/postgres"
18
- NATS_URL = "nats://nats:4222"
19
-
20
  WAITING_PLAYERS = []
21
  PLAYER_DATA = {}
22
  GAME_STATES = {}
23
 
24
- nats_client = NATS()
25
- loop = asyncio.new_event_loop()
26
- asyncio.set_event_loop(loop)
27
-
28
- async def init_db():
29
- return await asyncpg.create_pool(dsn=DB_DSN)
30
-
31
- db_pool = loop.run_until_complete(init_db())
32
-
33
- async def publish_event(event_type, data):
34
- message = json.dumps({'type': event_type, 'data': data})
35
- await nats_client.publish("checkers", message.encode())
36
-
37
- async def subscribe():
38
- async def message_handler(msg):
39
- event = json.loads(msg.data.decode())
40
- if event['type'] == 'opponent_move':
41
- sio.emit('opponent_move', event['data']['move'], room=event['data']['room'], skip_sid=event['data']['sid'])
42
- elif event['type'] == 'game_over':
43
- sio.emit('game_over', event['data'], room=event['data']['room'])
44
- elif event['type'] == 'opponent_disconnected':
45
- sio.emit('opponent_disconnected', room=event['data']['room'])
46
-
47
- await nats_client.connect(servers=[NATS_URL], loop=loop)
48
- await nats_client.subscribe("checkers", cb=message_handler)
49
-
50
  def init_board():
51
  board = [[None for _ in range(8)] for _ in range(8)]
52
  for row in range(3):
@@ -79,7 +46,7 @@ def get_valid_moves(board, row, col, color, is_king):
79
 
80
  @app.route('/')
81
  def index():
82
- return "Checkers server running."
83
 
84
  @app.route('/state')
85
  def game_state():
@@ -166,18 +133,18 @@ def move(sid, data):
166
 
167
  flat = sum(board, [])
168
  if all(p not in flat for p in ['r', 'R']):
169
- loop.create_task(publish_event('game_over', {'winner': 'black', 'room': room}))
170
  del GAME_STATES[room]
171
  return
172
  if all(p not in flat for p in ['b', 'B']):
173
- loop.create_task(publish_event('game_over', {'winner': 'red', 'room': room}))
174
  del GAME_STATES[room]
175
  return
176
 
177
  state['board'] = board
178
  state['turn'] = 'black' if turn == 'red' else 'red'
179
  GAME_STATES[room] = state
180
- loop.create_task(publish_event('opponent_move', {'move': data, 'room': room, 'sid': sid}))
181
 
182
  @sio.event
183
  def disconnect(sid):
@@ -192,8 +159,7 @@ def disconnect(sid):
192
  del PLAYER_DATA[psid]
193
  if room in GAME_STATES:
194
  del GAME_STATES[room]
195
- loop.create_task(publish_event('opponent_disconnected', {'room': room}))
196
 
197
  if __name__ == '__main__':
198
- threading.Thread(target=lambda: loop.run_until_complete(subscribe()), daemon=True).start()
199
  eventlet.wsgi.server(eventlet.listen(('0.0.0.0', 5000)), app)
 
1
  import random
2
  import json
3
  import socketio
4
+ from flask import Flask, render_template, jsonify
5
  import eventlet
 
 
 
 
6
 
7
  eventlet.monkey_patch()
8
 
 
10
  app = Flask(__name__)
11
  app.wsgi_app = socketio.WSGIApp(sio, app.wsgi_app)
12
 
 
 
 
13
  WAITING_PLAYERS = []
14
  PLAYER_DATA = {}
15
  GAME_STATES = {}
16
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
17
  def init_board():
18
  board = [[None for _ in range(8)] for _ in range(8)]
19
  for row in range(3):
 
46
 
47
  @app.route('/')
48
  def index():
49
+ return render_template('client.html')
50
 
51
  @app.route('/state')
52
  def game_state():
 
133
 
134
  flat = sum(board, [])
135
  if all(p not in flat for p in ['r', 'R']):
136
+ sio.emit('game_over', {'winner': 'black', 'room': room}, room=room)
137
  del GAME_STATES[room]
138
  return
139
  if all(p not in flat for p in ['b', 'B']):
140
+ sio.emit('game_over', {'winner': 'red', 'room': room}, room=room)
141
  del GAME_STATES[room]
142
  return
143
 
144
  state['board'] = board
145
  state['turn'] = 'black' if turn == 'red' else 'red'
146
  GAME_STATES[room] = state
147
+ sio.emit('opponent_move', {'move': data, 'room': room, 'sid': sid}, room=room, skip_sid=sid)
148
 
149
  @sio.event
150
  def disconnect(sid):
 
159
  del PLAYER_DATA[psid]
160
  if room in GAME_STATES:
161
  del GAME_STATES[room]
162
+ sio.emit('opponent_disconnected', room=room)
163
 
164
  if __name__ == '__main__':
 
165
  eventlet.wsgi.server(eventlet.listen(('0.0.0.0', 5000)), app)