Handling commands
Our handle_cmd()
method does nothing, for now, so let's update it. First of all, we'll need a method to send a response to a client:
impl Client { #[async] fn send(mut self, answer: Answer) -> Result<Self> { self.writer = await!(self.writer.send(answer))?; Ok(self) } }
This simply calls the send()
method of the writer
. Since it consumes it, we reassign the result to the attribute.
Now, we'll handle the USER
FTP command:
#[async] fn handle_cmd(mut self, cmd: Command) -> Result<Self> { println!("Received command: {:?}", cmd); match cmd { Command::User(content) => { if content.is_empty() { self = await! (self.send(Answer::new(ResultCode::InvalidParameterOrArgument, "Invalid username")))?; } else { self = await!(self.send(Answer::new(ResultCode::UserLoggedIn, &format!("Welcome {}!", content))))?; } ...