From 855fb1f2193f002e4cb824ca566913e421de57f0 Mon Sep 17 00:00:00 2001 From: Aaron Weiss Date: Sat, 20 Dec 2014 20:13:16 -0500 Subject: [PATCH] Added example of autoreconnection. --- examples/autoreconnect.rs | 45 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 examples/autoreconnect.rs diff --git a/examples/autoreconnect.rs b/examples/autoreconnect.rs new file mode 100644 index 0000000..8da0ed1 --- /dev/null +++ b/examples/autoreconnect.rs @@ -0,0 +1,45 @@ +#![feature(slicing_syntax)] +extern crate irc; + +use std::default::Default; +use std::sync::Arc; +use irc::data::{Command, Config}; +use irc::server::{IrcServer, Server}; +use irc::server::utils::Wrapper; + +fn main() { + let config = Config { + nickname: Some(format!("pickles")), + server: Some(format!("irc.fyrechat.net")), + channels: Some(vec![format!("#vana")]), + .. Default::default() + }; + let irc_server = Arc::new(IrcServer::from_config(config).unwrap()); + irc_server.conn().set_keepalive(Some(5)).unwrap(); + // The wrapper provides us with methods like send_privmsg(...) and identify(...) + spawn(move || { + let server = Wrapper::new(&*irc_server); + server.identify().unwrap(); + loop { + let mut quit = false; + for msg in server.iter() { + match msg { + Ok(msg) => { + print!("{}", msg.into_string()); + match Command::from_message(&msg) { + Ok(Command::PRIVMSG(_, msg)) => if msg.contains("bye") { + server.send_quit("").unwrap() + }, + Ok(Command::ERROR(msg)) if msg.contains("Quit") => quit = true, + _ => (), + } + }, + Err(_) => break, + } + } + if quit { break } + irc_server.reconnect().unwrap(); + server.identify().unwrap(); + } + }); +}