예제 #1
0
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)
예제 #2
0
	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")
예제 #3
0
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)
예제 #4
0
    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")