def handshake_ack(message): match = manager.get_match(message['match']) if match == None: app.logger.info("Tried to access to match: " + message['match']) return color = match.get_color(message['player']) code = match.join_match(message['player'], message['sid']) app.logger.info("[HANDSHAKE] ack received from " + message['sid'] + "C: " + color) if (code == 0 or code == 1 or code == 2 or code == 3): match = manager.get_match(message['match']) emit('chat', {'data': match.get_stack_as_string()}, room=request.sid) out = match.get_outcome() if out != None: emit('ended', { 'cause': out.termination.value, 'winner': out.winner, 'result': out.result() }, room=request.sid) match.finish_match(out.termination.value, out.winner) leave_room(request.sid) join_room(message['match']) matcher[message['sid']] = { 'code': message['match'], 'player': message['player'] } emit('unlock', {'data': coder[code]}, room=message['match']) emit('receive_movement', match.pack_data(), room=message['match']) emit('chat', {'data': coder[code] + " CONNECTED"}, room=message['match']) manager.update(match) app.logger.info("PLAYER " + match.get_color(message['player']) + " JOINED OKAY") elif code == -4: finish = match.get_finish_cause() if finish == "draw": emit('ended', { 'cause': 12, 'winer': "draw", 'result': "1/2-1/2" }, room=request.sid) else: emit('ended', { 'cause': finish.termination.value, 'winner': finish.termination.winner, 'result': finish.termination.result() }, room=request.sid) else: evt = Request(RequestType.ERROR, match.get_name_from_code(message['player']), "ERROR JOINING: INVALID PLAYER CODE") match.push_event(evt) emit('new_event', evt.get_json(), room=accountant.get_cpanel()) app.logger.info("ERROR JOINING: INVALID PLAYER CODE")
def disconnect(): try: app.logger.info("[DC] " + request.sid + " requesting disconnect") match_code = matcher[request.sid] match = manager.get_match(match_code['code']) code = match.leave_match(match_code['player']) if (code == 0 or code == 1): leave_room(match_code['code']) emit('chat', { 'data': match.get_color(match_code['player']) + " DISCONNECTED" }, room=match_code['code']) app.logger.info("[DC] " + match.get_color(match_code['player']) + " " + request.sid + " disconnected ok") manager.update(match) else: evt = Request(RequestType.ERROR, request.sid, "[DC] CODE NOT FOUND") match.push_event(evt) emit('new_event', evt.get_json(), room=accountant.get_cpanel()) app.logger.error("[DC] CODE NOT FOUND") except: app.logger.error("[DC] ERROR") traceback.print_exc()
def admin(message): match = manager.get_match(message['match']) match.stop_timer() app.logger.info(message['match'] + " " + match.get_color(message['player']) + " REQUESTED ADMIN") evt = Request(RequestType.ADMIN, match.get_name_from_code(message['player'])) match.push_event(evt) emit('new_event', evt.get_json(), room=accountant.get_cpanel()) emit('stop_timer', {}, room=message['match'])
def report(message): try: match = manager.get_match(message['match']) match.stop_timer() app.logger.info(message['match'] + " " + match.get_color(message['player']) + " REPORTED ILLEGAL") evt = Request(RequestType.ILLEGAL, match.get_name_from_code(message['player'])) app.logger.info(evt.get()) match.push_event(evt) emit('new_event', evt.get_json(), room=accountant.get_cpanel()) emit('stop_timer', {}, room=message['match']) app.logger.info("SENT STOP TIMER EVENT") except: app.logger.info("ERROR EN REPORT ILLEGAL") traceback.print_exc()