Exemplo n.º 1
0
	def handle (self):
		token = self.token.data

		character = models.SessionCharacter.query.filter_by(token = token).first()
		if not character:
			return error_response('Invalid token')

		State.add_client(self.websocket, character.game_session_id, character.id)

		self.group_call_client_action("CharacterJoined", {'character': character.as_dict()}, include_sender = False)

		return {'success': True, 'is_authorized': True}
Exemplo n.º 2
0
def run (settings):
	host = '0.0.0.0' # settings.get('connection', 'host')
	port = settings.getint('connection', 'port')

	State.init_settings(web_url = settings.get('main', 'web_url'))

	db.init(sqlalchemy.engine_from_config({
		'sqlalchemy.url': settings.get('database', 'url'),
	}), {})

	logger.info("listening on ws://%s:%s", host, port)
	websocket_server = gevent.pywsgi.WSGIServer((host, port), websocket_app, handler_class = QuietWebSocketHandler)
	websocket_server.set_environ({
		'server': websocket_server,
	})
	websocket_server.start()

	try:
		websocket_server.serve_forever()
	except KeyboardInterrupt:
		logger.info("interrupted")
	else:
		logger.info("[!] stopped due to error")
Exemplo n.º 3
0
def websocket_app (environ, start_response):
	try:
		if environ['PATH_INFO'] == '/playground':
			websocket = environ['wsgi.websocket']

			while True:
				try:
					data = websocket.receive()
					if not data:
						State.forget_client(websocket)
						break
					else:
						utils.handle_message(websocket, data)

				except WebSocketError:
					raise

				finally:
					DBSession.remove()


	except Exception:
		logger.warn("Playfield: uncaught error is occured.", exc_info = True)