|
|
|
@ -2,6 +2,7 @@ use anyhow::Context as AnyhowContext; |
|
|
|
use solstice_proto::ServerRequest;
|
|
|
|
|
|
|
|
use crate::context::Context;
|
|
|
|
use crate::control;
|
|
|
|
use crate::message_handler::MessageHandler;
|
|
|
|
|
|
|
|
#[derive(Debug, Default)]
|
|
|
|
@ -11,7 +12,20 @@ impl MessageHandler for RoomListRequestHandler { |
|
|
|
type Message = ();
|
|
|
|
|
|
|
|
fn run(self, context: &Context, _message: &()) -> anyhow::Result<()> {
|
|
|
|
// TODO: Send `RoomListResponse` back over socket.
|
|
|
|
{
|
|
|
|
let guard = context.state.lock();
|
|
|
|
let rooms = guard.rooms.get_room_list();
|
|
|
|
let control_response =
|
|
|
|
control::Response::RoomListResponse(control::RoomListResponse {
|
|
|
|
rooms,
|
|
|
|
});
|
|
|
|
|
|
|
|
context
|
|
|
|
.control_response_tx
|
|
|
|
.blocking_send(control_response)
|
|
|
|
.context("sending control response")?;
|
|
|
|
}
|
|
|
|
|
|
|
|
context
|
|
|
|
.server_request_tx
|
|
|
|
.blocking_send(ServerRequest::RoomListRequest)
|
|
|
|
@ -26,10 +40,13 @@ impl MessageHandler for RoomListRequestHandler { |
|
|
|
|
|
|
|
#[cfg(test)]
|
|
|
|
mod tests {
|
|
|
|
use solstice_proto::server::RoomListResponse;
|
|
|
|
use solstice_proto::ServerRequest;
|
|
|
|
|
|
|
|
use crate::context::ContextBundle;
|
|
|
|
use crate::context::{ContextBundle, ContextOptions};
|
|
|
|
use crate::control;
|
|
|
|
use crate::message_handler::MessageHandler;
|
|
|
|
use crate::room::{Room, Visibility};
|
|
|
|
|
|
|
|
use super::RoomListRequestHandler;
|
|
|
|
|
|
|
|
@ -45,4 +62,33 @@ mod tests { |
|
|
|
|
|
|
|
assert_eq!(request, ServerRequest::RoomListRequest);
|
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn run_sends_immediate_response() {
|
|
|
|
let mut options = ContextOptions::default();
|
|
|
|
options.initial_state.rooms.set_room_list(RoomListResponse {
|
|
|
|
rooms: vec![("potato".to_string(), 123), ("apple".to_string(), 42)],
|
|
|
|
owned_private_rooms: vec![],
|
|
|
|
other_private_rooms: vec![],
|
|
|
|
operated_private_room_names: vec![],
|
|
|
|
});
|
|
|
|
|
|
|
|
let mut bundle = ContextBundle::new(options);
|
|
|
|
|
|
|
|
RoomListRequestHandler::default()
|
|
|
|
.run(&bundle.context, &())
|
|
|
|
.unwrap();
|
|
|
|
|
|
|
|
let response = bundle.control_response_rx.blocking_recv().unwrap();
|
|
|
|
|
|
|
|
assert_eq!(
|
|
|
|
response,
|
|
|
|
control::Response::RoomListResponse(control::RoomListResponse {
|
|
|
|
rooms: vec![
|
|
|
|
("apple".to_string(), Room::new(Visibility::Public, 42)),
|
|
|
|
("potato".to_string(), Room::new(Visibility::Public, 123)),
|
|
|
|
]
|
|
|
|
})
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|