def room_rename(sock, data=None): u = User.find_user_by_sock(sock) r = Room.find_room_by_name(data['destination']) r.alias = data['room_rename'] api_mongo.rename_room(data['destination'], data['room_rename']) list_user = Room.find_users_by_room(data['destination']) info = {"type": "chat", "payload": {"command": "room_rename", "room_id": data['destination'], "alias": data['room_rename']}} send_broadcast(list_user, info, u.resource)
def user_change_text(sock, data): destination = data['destination'] tp = data["type"] u = User.find_user_by_sock(sock) list_user = Room.find_users_by_room(destination) info = {"type": "chat", "payload": {"command": "user_change_text", "room_id": destination, "user": u.username, "type": tp}} send_broadcast(list_user, info, u.resource)
def user_remove(sock, data): # logging.info(' room_leave data{}:\n %r', data) users_to_remove = data['user_remove'] if type(users_to_remove) is unicode: users_to_remove = [data['user_remove']] u = User.find_user_by_sock(sock) users_remove = data['user_remove'] if type(users_remove) is unicode: users_remove = [data['user_remove']] print("USERS REMOVE ", users_remove) destination = data['destination'] # id de sala a ser alterada room_users = Room.find_users_by_room(destination) # Lista de usuarios em uma sala print("ROOOMS USERS", room_users) for el in users_remove: # envia mensagem dos novos nomes send_system_info(sock, destination, 'USER REMOVE', el) # envia message para grupo da saida do user u_list = [] # lista final for el in room_users: if not (el in users_remove): u_list.append(el) new_room = Room.find_room_by_name(destination) # sock para o nova sala alterada new_room.users_name = [{"username": _u, "seen": None, "received": None} for _u in u_list] current_user = User.find_user_by_sock(sock) for uremove in users_to_remove: api_mongo.remove_user_room(destination, uremove) u = User.find_user_by_name(uremove, u.resource) if u: info = {"type": "chat", "payload": {"command": "user_remove", "room_id": destination}} send(u, info)
def room_message(sock, data): # logging.info(' room_message data{}: %r', data) sender = data['sender'] destination = data['destination'] t = time.time() u = User.find_user_by_sock(sock) if 'message' in data: message = data['message'] alias = Room.find_alias_by_room(destination) r = Room.find_room_by_name(data['destination']) r.last_message = t target = data['target'] if 'target' in data else '' message_id = str(uuid.uuid4()) Room.history_add(sender, destination, message, alias, target, message_id, t) info = { "type": "chat", "payload": { "command": "room_message", "dt": t, "message": message, "room_id": destination, "sender": sender, "alias": alias, "target": target, "message_id": message_id } } list_user = Room.find_users_by_room(destination) send_broadcast(list_user, info, u.resource) if not sender == "system_info": sub_list = Room.find_users_instance_by_room(destination, u.networkId) sub_list.remove({'networkId': u.networkId, 'username': sender}) send_to_parse_multicast(info, sub_list)
def room_user_add(sock, data): u = User.find_user_by_sock(sock) new_users_name = data['details']['new_user'] if type(new_users_name) is unicode: new_users_name = [data['new_user']] echo = None if "echo" in data: echo = data['echo'] origin = data['details']['destination'] room_users = Room.find_users_by_room(origin) # Lista de usuarios em uma sala u_list = [] for el in new_users_name: if not (el in room_users): u_list.append(el) if room_users: for el in room_users: u_list.append(el) destination = Room.check_exist_room(u_list, u.resource) if not destination: room_name = Room.open([], u.resource) # cria a sala e recebe nome unico a sala new_room = Room.find_room_by_name(room_name) # sock para o nova sala criada destination = new_room.room_id new_room.is_group = True new_room.last_message = time.time() new_room.alias = 'DEFAULT' # todo - validar nome default # for unew in u_list: # todo validar se os usuarios estao off-line # if unew != User.find_user_by_name(unew, u.resource)['username']: # api_mongo.insert_user(unew, u.resource) obj_users = [{"username": i, "seen": None, "received": None} for i in u_list] api_mongo.insert_room(obj_users, room_name, new_room.alias, u.resource, True, new_room.last_message) if destination: room_restore(destination) new_room = Room.find_room_by_name(destination) # sock para o nova sala criada [send_system_info(sock, destination, 'USER ADD', el) for el in new_users_name] # envia message para grupo da entrada do user new_room.users_name = [] obj_users = [{"username": i, "seen": None, "received": None} for i in u_list] new_room.users_name = obj_users new_room.is_group = True new_room.last_message = time.time() info = { "type": "chat", "payload": { "command": "room_id", "alias": new_room.alias, "room_id": new_room.room_id, "is_group": True, "users": obj_users, "echo": echo, "last_message": new_room.last_message } } send_broadcast(room_users, info, u.resource)