def _handle_new_chat(self): user_entry = users.get_user_entry(self.user_id) session_id = user_entry.joined_id if session_id is None: session_id = user_entry.invited_id session_entry = session.get_entry(session_id) output_buf = session_entry.chat_buf sender, msg = output_buf[-1] avatar = user_entry.avatar event = {'chat': {'sender': sender, 'message': msg}} event_str = json.dumps(event) avatar.send_event_to_client(event_str)
def _reject_invitation(self): user_id = self.user_id my_entry = users.get_user_entry(user_id) session_id = my_entry.invited_id my_entry.invited_id = None self.lobby.reject() session_entry = session.get_entry(session_id) owner = session_entry.owner owner_entry = users.get_user_entry(owner) owner_avatar = owner_entry.avatar owner_avatar.send_app_signal(('invite-cancelled', user_id)) owner_avatar.send_message( "{} rejected your invitation.".format(user_id))
def _leave_session(self): user_id = self.user_id my_entry = users.get_user_entry(user_id) session_id = my_entry.joined_id my_entry.joined_id = None session_entry = session.get_entry(session_id) session_entry.members.discard(user_id) self.lobby.cancel() members = set(session_entry.members) members.discard(user_id) msg = "{} left session {}.".format(user_id, session_id) for player in members: user_entry = users.get_user_entry(player) avatar = user_entry.avatar avatar.send_message(msg)
def chat(self, request): if not check_authenticated(request): return avatar = get_avatar(request) user_id = avatar.user_id message = request.args.get(b'message')[0]; message = message.decode('utf-8') user_entry = users.get_user_entry(user_id) session_id = user_entry.joined_id or user_entry.invited_id if session_id is None: return session_entry = session.get_entry(session_id) chat_buf = session_entry.chat_buf chat_buf.append((user_id, message)) signal = ('chat-message', {'sender': user_id}) session.send_signal_to_members(session_id, signal, include_invited=True)
def _show_joined(self): """ List the players that have joined the session. """ user_id = self.user_id my_entry = users.get_user_entry(user_id) session_id = my_entry.joined_id session_entry = session.get_entry(session_id) members = list(session_entry.members) members.sort() lines = [] lines.append("The following players have joined the session:") for n, player in enumerate(members): lines.append("{}) {}".format(n + 1, player)) self.output.append('\n'.join(lines)) self.update_display()
def _show_chat(self): input_buf = self.input_buf user_id = self.user_id user_entry = users.get_user_entry(user_id) session_id = None if not user_entry.joined_id is None: session_id = user_entry.joined_id elif not user_entry.invited_id is None: session_id = user_entry.invited_id if session_id is None: return session_entry = session.get_entry(session_id) output_buf = session_entry.chat_buf dialog = ChatDialog.make_instance(input_buf, output_buf) self.install_dialog(dialog) self.new_chat_flag = False
def _start_session(self): user_id = self.user_id my_entry = users.get_user_entry(user_id) session_id = my_entry.joined_id session_entry = session.get_entry(session_id) for player in self.pending_invitations: player_entry = users.get_user_entry(player) player_entry.app_protocol.lobby.revoke_invitation() msg = "Session '{}' was started. Your invitation has been revoked.".format( session_id) player_entry.app_protocol.output.append(msg) player_entry.invited_id = None player_entry.app_protocol.update_display() members = session_entry.members for member in members: entry = users.get_user_entry(member) entry.app_protocol.lobby.start_session()
def _cancel_session(self): user_id = self.user_id my_entry = users.get_user_entry(user_id) session_id = my_entry.joined_id session_entry = session.get_entry(session_id) members = session_entry.members session.destroy_entry(session_id) msg = "{} cancelled the session.".format(user_id) for member in members: entry = users.get_user_entry(member) entry.joined_id = None entry.invited_id = None entry.avatar.send_message(msg) entry.app_protocol.appstate.cancel() pending_invitations = self.pending_invitations for player in pending_invitations: entry = users.get_user_entry(player) entry.joined_id = None entry.invited_id = None entry.avatar.send_message(msg) entry.app_protocol.appstate.revoke_invitation()
def _accept_invitation(self): user_id = self.user_id my_entry = users.get_user_entry(user_id) session_id = my_entry.invited_id session_entry = session.get_entry(session_id) owner = session_entry.owner owner_entry = users.get_user_entry(owner) my_entry.joined_id = session_id my_entry.invited_id = None session_entry.members.add(user_id) self.lobby.accept() pending_invitations = owner_entry.app_protocol.pending_invitations pending_invitations.discard(user_id) members = set(session_entry.members) members.discard(user_id) members = members.union(pending_invitations) msg = "{} joined session {}.".format(user_id, session_id) for player in members: user_entry = users.get_user_entry(player) avatar = user_entry.avatar avatar.send_message(msg)