aboutsummaryrefslogtreecommitdiffstats
path: root/examples/src
diff options
context:
space:
mode:
authorZachary Dremann <dremann@gmail.com>2014-06-25 15:50:16 -0400
committerZachary Dremann <dremann@gmail.com>2014-06-25 16:06:44 -0400
commitae22f22a931b207301681f2fc948e8e9cfd1daf7 (patch)
tree3e1b8d6ef91f010fe048bf5d205b90d6f16b68d2 /examples/src
parent4beb868e0ca2aa5ad9c29e4ba934c0fd8fc2501e (diff)
downloadrusty-irc-ae22f22a931b207301681f2fc948e8e9cfd1daf7.tar.gz
rusty-irc-ae22f22a931b207301681f2fc948e8e9cfd1daf7.zip
Updated for Cargo
Diffstat (limited to 'examples/src')
-rw-r--r--examples/src/client.rs53
-rw-r--r--examples/src/rusti.rs54
2 files changed, 107 insertions, 0 deletions
diff --git a/examples/src/client.rs b/examples/src/client.rs
new file mode 100644
index 0000000..9c5e15a
--- /dev/null
+++ b/examples/src/client.rs
@@ -0,0 +1,53 @@
+extern crate irc;
+extern crate libc;
+
+use std::io::stdio;
+
+use irc::IrcClient;
+
+fn main() {
+ let mut stderr = stdio::stderr();
+
+ let mut args = std::os::args().move_iter();
+ args.next();
+ let host = args.next().expect("No hostname passed");
+ let port: u16 = from_str(args.next().unwrap_or_else(|| { let _ = writeln!(stderr, "No port given. Assuming 6667."); "6667".to_string() }).as_slice())
+ .expect("Port must be a number");
+
+ drop(args);
+
+ let (tx, rx) = channel();
+
+ let nicks = (vec!["rusti-irc".to_string()]).move_iter();
+ let config = irc::ClientConfig {
+ nicks: nicks,
+ username: "dremann".to_string(),
+ real_name: "Zachary Dremann".to_string()
+ };
+
+ let client = IrcClient::new(config, host.as_slice(), port, tx).unwrap();
+ let sender = client.sender().clone();
+
+ spawn(proc() {
+ let mut stdin = stdio::stdin();
+ for line in stdin.lines() {
+ match line {
+ Ok(s) => {
+ match from_str(s.as_slice()) {
+ Some(msg) => { if sender.send_opt(msg).is_err() { break; } },
+ None => ()
+ }
+ }
+ Err(_) => break,
+ }
+ }
+ });
+
+ for msg in rx.iter() {
+ let c = client.clone();
+ println!("{}", c.nick());
+ println!("{} {}", msg.prefix, msg.command);
+ }
+
+ unsafe { libc::exit(0); }
+}
diff --git a/examples/src/rusti.rs b/examples/src/rusti.rs
new file mode 100644
index 0000000..91d50dd
--- /dev/null
+++ b/examples/src/rusti.rs
@@ -0,0 +1,54 @@
+extern crate irc;
+extern crate getopts;
+extern crate libc;
+
+use std::os;
+use std::io;
+
+use getopts::{getopts, opt, optflag, optflagmulti, optmulti, optopt, reqopt, short_usage, usage};
+
+struct ShowableTraitObject<'a>(&'a std::fmt::Show);
+
+impl<'a> std::fmt::Show for ShowableTraitObject<'a> {
+ fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
+ let &ShowableTraitObject(inner) = self;
+ inner.fmt(f)
+ }
+}
+
+fn main() {
+
+ let opts = [
+ optflag("h", "help", "Print help information"),
+ optmulti("c", "channel", "What channel should be joined", "CHANNEL"),
+ optopt("p", "port", "What port should be used to connect to server", "PORT"),
+ optflag("", "ignore-privmsg", "Ignore messages sent directly, only respond to those in a joinned channel"),
+ ];
+ let args = os::args();
+ let program = args.get(0);
+
+ let err: |i32, &std::fmt::Show| -> ! = |code: i32, err_msg: &std::fmt::Show| {
+ let mut stderr = io::stderr();
+ let _ = writeln!(stderr, "{}", ShowableTraitObject(err_msg));
+ let short = short_usage(program.as_slice(), opts);
+ let _ = writeln!(stderr, "{}", usage(short.as_slice(), opts));
+ unsafe{ libc::exit(code) }
+ };
+
+ let matches = match getopts(args.tail(), opts) {
+ Ok(m) => { m }
+ Err(e) => { err(1, &e); }
+ };
+
+ if matches.opt_present("help") {
+ let short = short_usage(program.as_slice(), opts);
+ println!("{}", usage(short.as_slice(), opts));
+ return;
+ }
+
+ let channels = matches.opt_strs("channel");
+ let port: u16 = from_str(matches.opt_str("port").unwrap_or("6667".to_string()).as_slice()).expect("Please pass a port number to -p or --port");
+ let ignore_privmsg = matches.opt_present("ignore-privmsg");
+ let server = if matches.free.len() != 1 { err(2, &"No server passed") } else { matches.free.move_iter().next().unwrap() };
+ println!("server:{}, channels:{}, port:{}, ignore?:{}", server, channels, port, ignore_privmsg);
+}