diff --git a/examples/simple.rs b/examples/simple.rs index fbd7e7e..81d708c 100644 --- a/examples/simple.rs +++ b/examples/simple.rs @@ -21,6 +21,6 @@ fn main() { let server = IrcServer::from_config(config).unwrap(); identify(&server).unwrap(); for message in server.iter() { - println!("{}", message.into_string()) + println!("{}", message); } } diff --git a/src/data/message.rs b/src/data/message.rs index 3019749..022e469 100644 --- a/src/data/message.rs +++ b/src/data/message.rs @@ -64,7 +64,7 @@ impl FromStr for Message { None }; let suffix = if state.contains(":") { - let suffix = state.find(':').map(|i| state[i+1..state.len()-1]); + let suffix = state.find(':').map(|i| state[i+1..state.len()-2]); state = state.find(':').map_or("", |i| state[..i]); suffix } else { diff --git a/src/server/mod.rs b/src/server/mod.rs index 483d820..37184a1 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -2,7 +2,7 @@ #![experimental] use std::io::{BufferedReader, BufferedWriter, IoResult, TcpStream}; use conn::Connection; -use data::command::Command; +use data::command::{Command, PONG}; use data::config::Config; use data::kinds::{IrcReader, IrcWriter}; use data::message::Message; @@ -69,6 +69,14 @@ impl<'a, T, U> IrcServer<'a, T, U> where T: IrcWriter, U: IrcReader { config: config }) } + + fn handle_message(&self, message: &Message) { + if message.command[] == "PING" { + self.send(PONG(message.args[0][], None)).unwrap(); + println!("PING! PONG!"); + } + /* TODO: implement more message handling */ + } } /// An Iterator over an IrcServer's incoming Messages @@ -92,7 +100,11 @@ impl<'a, T, U> Iterator for ServerIterator<'a, T, U> where T: IrcWriter let line = self.server.conn.recv(); match line { Err(_) => None, - Ok(msg) => from_str(msg[]) + Ok(msg) => { + let message = from_str(msg[]); + self.server.handle_message(message.as_ref().unwrap()); + message + } } } }