def message(request, socket, context, message): """ Event handler for a room receiving a message. First validates a joining user's name and sends them the list of users. """ room_id = message["room"] room = chat_db.where("chat_chatroom", id = room_id) if message["action"] == "start": raw_user_name = message["name"] user_name = base64.b64decode(raw_user_name).decode("utf_8") user = chat_db.where("chat_chatuser",name=user_name) if user: socket.send({"action": "in-use"}) else: users = [base64.b64encode(u.name.encode("utf_8")) for u in chat_db.select("chat_chatuser",dict(room_id=room_id),where="room_id=$room_id")] socket.send({"action": "started", "users": users}) user_session = socket.session.session_id user_id = chat_db.insert("chat_chatuser",name=user_name,room_id=room_id,session=user_session) context["user"] = {"id":user_id,"name":raw_user_name,"room_id":room_id,"session":user_session} joined = {"action": "join", "name": context["user"]["name"], "id": context["user"]["id"]} socket.send_and_broadcast_channel(joined) else: try: user = context["user"] except KeyError: return if message["action"] == "message": message["name"] = user["name"] socket.send_and_broadcast_channel(message)
def POST(myself): """ Handles post from the "Add room" form on the homepage, and redirects to the new room. """ input_data = web.input() room_name = input_data.name if room_name: slug_name = "-".join(room_name.lower().split(" ")) name_id = chat_db.insert('chat_chatroom', name=room_name,slug=slug_name) raise web.seeother("/room/" + slug_name) raise web.seeother("/rooms")
def message(request, socket, context, message): """ Event handler for a room receiving a message. First validates a joining user's name and sends them the list of users. """ room_id = message["room"] room = chat_db.where("chat_chatroom", id=room_id) if message["action"] == "start": raw_user_name = message["name"] user_name = base64.b64decode(raw_user_name).decode("utf_8") user = chat_db.where("chat_chatuser", name=user_name) if user: socket.send({"action": "in-use"}) else: users = [ base64.b64encode(u.name.encode("utf_8")) for u in chat_db.select("chat_chatuser", dict(room_id=room_id), where="room_id=$room_id") ] socket.send({"action": "started", "users": users}) user_session = socket.session.session_id user_id = chat_db.insert("chat_chatuser", name=user_name, room_id=room_id, session=user_session) context["user"] = { "id": user_id, "name": raw_user_name, "room_id": room_id, "session": user_session } joined = { "action": "join", "name": context["user"]["name"], "id": context["user"]["id"] } socket.send_and_broadcast_channel(joined) else: try: user = context["user"] except KeyError: return if message["action"] == "message": message["name"] = user["name"] socket.send_and_broadcast_channel(message)
def POST(myself): """ Handles post from the "Add room" form on the homepage, and redirects to the new room. """ input_data = web.input() room_name = input_data.name if room_name: slug_name = "-".join(room_name.lower().split(" ")) name_id = chat_db.insert('chat_chatroom', name=room_name, slug=slug_name) raise web.seeother("/room/" + slug_name) raise web.seeother("/rooms")