use std::{ collections::VecDeque, sync::{Arc, Condvar, Mutex}, }; use crate::{ dispatcher::MessageHandler, message::{factory::build_shared_folders_message, Message}, server::Room, }; pub struct RoomListHandler; impl MessageHandler for RoomListHandler { fn handle(&self, message: &mut Message, mut context: crate::server::Context) { let mut rooms: Vec = Vec::new(); let mut owned_private_rooms: Vec = Vec::new(); let mut private_rooms: Vec = Vec::new(); let mut operated_private_rooms: Vec = Vec::new(); // Number of rooms let num_rooms = message.read_int32(); for _ in 0..num_rooms { rooms.push(Room::new(message.read_string(), 0)); } // Number of rooms let num_rooms = message.read_int32(); // get the number of users in each room for i in 0..num_rooms { rooms[i as usize].set_number_of_users(message.read_int32()); } // Number of owned private rooms let num_owned_private_rooms = message.read_int32(); for _ in 0..num_owned_private_rooms { owned_private_rooms.push(Room::new(message.read_string(), 0)); } // Number of owned private rooms let num_owned_private_rooms = message.read_int32(); for i in 0..num_owned_private_rooms { owned_private_rooms[i as usize].set_number_of_users(message.read_int32()); } // Number of private rooms (except owned) let num_private_rooms = message.read_int32(); for _ in 0..num_private_rooms { private_rooms.push(Room::new(message.read_string(), 0)); } // Number of private rooms (except owned) let num_private_rooms = message.read_int32(); for i in 0..num_private_rooms { // Number of users in private rooms (except owned) private_rooms[i as usize].set_number_of_users(message.read_int32()); } // Number of operated private rooms let num_operated_private_rooms = message.read_int32(); for _ in 0..num_operated_private_rooms { operated_private_rooms.push(Room::new(message.read_string(), 0)); } let num_operated_private_rooms = message.read_int32(); for i in 0..num_operated_private_rooms { // Number of users in private rooms (except owned) operated_private_rooms[i as usize].set_number_of_users(message.read_int32()); } println!("Rooms: {:?}", rooms.len()); println!("Owned private rooms: {:?}", owned_private_rooms.len()); println!("Private rooms: {:?}", private_rooms.len()); println!("Operated private rooms: {:?}", operated_private_rooms.len()); context.set_rooms(rooms); } }