summaryrefslogtreecommitdiff
path: root/src/server
diff options
context:
space:
mode:
Diffstat (limited to 'src/server')
-rw-r--r--src/server/server/tcpserver.rs103
-rw-r--r--src/server/tasks.rs19
2 files changed, 40 insertions, 82 deletions
diff --git a/src/server/server/tcpserver.rs b/src/server/server/tcpserver.rs
index f4f6968..20bf5f3 100644
--- a/src/server/server/tcpserver.rs
+++ b/src/server/server/tcpserver.rs
@@ -33,14 +33,12 @@ pub struct TCPServer<'a> {
impl<'a> TCPServer<'a> {
pub fn new(listener: TcpListener) -> Arc<Self> {
- let s = Arc::new(
- Self {
- this: RefCell::new(Weak::new()),
- listener,
- task: None,
- clients: RefCell::new(Vec::new()),
- },
- );
+ let s = Arc::new(Self {
+ this: RefCell::new(Weak::new()),
+ listener,
+ task: None,
+ clients: RefCell::new(Vec::new()),
+ });
*s.this
.borrow_mut() = Arc::downgrade(&s);
s
@@ -68,16 +66,14 @@ impl<'a> Server<'a> for TCPServer<'a> {
Ok((socket, addr)) => self
.clients
.borrow_mut()
- .push(
- Client::new(
- self.this
- .borrow()
- .upgrade()
- .unwrap(),
- socket,
- addr,
- ),
- ), // the unwrap shouldn't panics, self has to be alive
+ .push(Client::new(
+ self.this
+ .borrow()
+ .upgrade()
+ .unwrap(),
+ socket,
+ addr,
+ )), // the unwrap shouldn't panics, self has to be alive
Err(e) => eprintln!("Failed to accept connection: {e}"),
};
}
@@ -117,12 +113,7 @@ impl<'a> Client<'a> {
}
// TODO: use framed
- async fn read(
- &mut self,
- ) -> Option<(
- Vec<u8>,
- usize,
- )> {
+ async fn read(&mut self) -> Option<(Vec<u8>, usize)> {
let mut len = vec![0; std::mem::size_of::<usize>()]; // vec! only take usize
if !self.handle_read(
self.stream
@@ -130,18 +121,13 @@ impl<'a> Client<'a> {
) {
return None;
}
- let len = usize::from_be_bytes(
- match len.try_into() {
- Ok(n) => n,
- Err(e) => {
- eprintln!(
- "Failed to convert length bytes to length usize: {:?}",
- e
- );
- return None;
- }
- },
- ); // TODO: move to a shared fn with client to ensure we use same endian
+ let len = usize::from_be_bytes(match len.try_into() {
+ Ok(n) => n,
+ Err(e) => {
+ eprintln!("Failed to convert length bytes to length usize: {:?}", e);
+ return None;
+ }
+ }); // TODO: move to a shared fn with client to ensure we use same endian
let mut buf = vec![0; len];
let read = self
.stream
@@ -150,11 +136,7 @@ impl<'a> Client<'a> {
if !self.handle_read(read) {
return None;
}
- Some(
- (
- buf, len,
- ),
- )
+ Some((buf, len))
}
async fn poll(&mut self) -> ! {
@@ -171,10 +153,7 @@ impl<'a> Client<'a> {
.read()
.await
{
- let req: Requests = match serde::decode_from_slice(
- buf.as_slice(),
- bincode::config::standard(),
- ) {
+ let req: Requests = match serde::decode_from_slice(buf.as_slice(), bincode::config::standard()) {
Ok((decoded, size)) => {
if size != len {
eprintln!("Decoded size {size} does not match expected size {len}, decode succeeded anyways?");
@@ -182,10 +161,7 @@ impl<'a> Client<'a> {
decoded
}
Err(e) => {
- eprintln!(
- "Failed to decode request from client {}: {e}",
- self.addr
- );
+ eprintln!("Failed to decode request from client {}: {e}", self.addr);
continue;
}
};
@@ -196,25 +172,20 @@ impl<'a> Client<'a> {
// Some(Request) should be send back to client
fn handle_request(&self, req: Requests) -> Option<Request> {
match req {
- Requests::Send((prev, (name, args))) => Some(
- Request::Post(
- (
- name,
- {
- Executor::new(
- (<remote_control_rs::tasks::server::Task<'_> as core::convert::TryFrom<_>>::try_from(name).unwrap()).as_ref(),
- args.split_whitespace(),
- ServerCtx {
- stream: &self.stream,
- },
- )
- .run()
- .to_owned()
+ Requests::Send((prev, (name, args))) => Some(Request::Post(
+ (name, {
+ Executor::new(
+ (<remote_control_rs::tasks::server::Task<'_> as core::convert::TryFrom<_>>::try_from(name).unwrap()).as_ref(),
+ args.split_whitespace(),
+ ServerCtx {
+ stream: &self.stream,
},
)
- .into(),
- ),
- ),
+ .run()
+ .to_owned()
+ })
+ .into(),
+ )),
_ => {
panic!()
}
diff --git a/src/server/tasks.rs b/src/server/tasks.rs
index c30d23a..88f3767 100644
--- a/src/server/tasks.rs
+++ b/src/server/tasks.rs
@@ -1,25 +1,12 @@
use remote_control_rs::tasks::{CompletedTask, server::Name};
use serde::Deserialize;
-pub type Task = (
- Name,
- String,
-);
+pub type Task = (Name, String);
#[derive(Deserialize)]
pub enum Requests {
- Send(
- (
- Vec<Requests>,
- Task,
- ),
- ),
- Respond(
- (
- Vec<Requests>,
- CompletedTask<Task>,
- ),
- ),
+ Send((Vec<Requests>, Task)),
+ Respond((Vec<Requests>, CompletedTask<Task>)),
}
#[derive(Deserialize)]