replace Sender with ExtSender from transformable_channels. Now we can tag each outgoing envelope with the name of its sender

This commit is contained in:
Adrian Malacoda
2017-02-25 21:11:25 -06:00
parent 544974117f
commit 1fbba2554d
9 changed files with 42 additions and 21 deletions

View File

@@ -8,7 +8,8 @@ use toml::Table;
use event;
use std::sync::Arc;
use std::sync::mpsc::{Sender, Receiver};
use std::sync::mpsc::Receiver;
use transformable_channels::mpsc::ExtSender;
use {MessageSender, Message, User, Channel};
@@ -52,7 +53,7 @@ impl MessageSender for DiscordMessageSender {
}
impl Module for DiscordModule {
fn run (&self, sender: Sender<event::Envelope>, _: Receiver<Arc<event::Envelope>>) {
fn run (&self, sender: Box<ExtSender<event::Envelope>>, _: Receiver<Arc<event::Envelope>>) {
let discord = Arc::new(Discord::from_bot_token(&self.token[..]).expect("Discord module: Login failed"));
let (mut connection, _) = discord.connect().expect("Discord module: Connection failed");

View File

@@ -2,7 +2,8 @@ use modules::Module;
use toml::Table;
use std::sync::Arc;
use std::sync::mpsc::{Sender, Receiver};
use std::sync::mpsc::Receiver;
use transformable_channels::mpsc::ExtSender;
use helpers::command::split_command;
use event::{Event, Envelope};
@@ -24,13 +25,13 @@ impl EchoModule {
}
impl Module for EchoModule {
fn run(&self, _: Sender<Envelope>, receiver: Receiver<Arc<Envelope>>) {
fn run(&self, _: Box<ExtSender<Envelope>>, receiver: Receiver<Arc<Envelope>>) {
loop {
match receiver.recv() {
Ok(envelope) => {
match envelope.event {
Event::Message { ref message } => {
debug!("Received message... {:?}", message.content);
debug!("Received message from module {:?}... {:?}", envelope.from, message.content);
match split_command(&message.content) {
Some((command, argument)) => {
if command == self.prefix {

View File

@@ -2,7 +2,8 @@ use modules::Module;
use toml::Table;
use std::sync::Arc;
use std::sync::mpsc::{Sender, Receiver};
use std::sync::mpsc::Receiver;
use transformable_channels::mpsc::ExtSender;
use helpers::command::split_command;
use event::{Event, Envelope};
@@ -31,7 +32,7 @@ impl EchoboxModule {
}
impl Module for EchoboxModule {
fn run(&self, _: Sender<Envelope>, receiver: Receiver<Arc<Envelope>>) {
fn run(&self, _: Box<ExtSender<Envelope>>, receiver: Receiver<Arc<Envelope>>) {
let echobox = Echobox::with_file(&self.file).unwrap();
loop {
@@ -39,7 +40,7 @@ impl Module for EchoboxModule {
Ok(envelope) => {
match envelope.event {
Event::Message { ref message } => {
debug!("Received message... {:?}", message.content);
debug!("Received message from module {:?}... {:?}", envelope.from, message.content);
match split_command(&message.content) {
Some((command, in_quote)) => {
if command == self.prefix {

View File

@@ -12,9 +12,10 @@ use Tenquestionmarks;
use event::Envelope;
use std::sync::Arc;
use std::sync::mpsc::{Sender, Receiver};
use std::sync::mpsc::Receiver;
use transformable_channels::mpsc::ExtSender;
pub trait Module : Sync {
fn register (&self, _: &Tenquestionmarks) {}
fn run (&self, _: Sender<Envelope>, _: Receiver<Arc<Envelope>>) {}
fn run (&self, _: Box<ExtSender<Envelope>>, _: Receiver<Arc<Envelope>>) {}
}

View File

@@ -2,7 +2,9 @@ use modules::Module;
use toml::Table;
use std::sync::Arc;
use std::sync::mpsc::{Sender, Receiver};
use std::sync::mpsc::Receiver;
use transformable_channels::mpsc::ExtSender;
use event::{Event, Envelope};
use Message;
@@ -135,7 +137,7 @@ impl PirateVsNinja {
}
impl Module for PvnModule {
fn run(&self, _: Sender<Envelope>, receiver: Receiver<Arc<Envelope>>) {
fn run(&self, _: Box<ExtSender<Envelope>>, receiver: Receiver<Arc<Envelope>>) {
let mut pvn = PirateVsNinja {
pirates: Pirates::new(),
ninjas: Ninjas::new()
@@ -147,7 +149,7 @@ impl Module for PvnModule {
match envelope.event {
Event::Message { ref message } => {
let command = split_command(&message.content);
debug!("Received message... {:?}", &message.content);
debug!("Received message from module {:?}... {:?}", envelope.from, message.content);
match command {
Some(("?pvn", argument)) => { pvn.pvn_command(argument, message) },
Some(("?pirate", name)) => { pvn.pirate_command(name, message) },

View File

@@ -2,7 +2,8 @@ use modules::Module;
use toml::Table;
use std::sync::Arc;
use std::sync::mpsc::{Sender, Receiver};
use std::sync::mpsc::Receiver;
use transformable_channels::mpsc::ExtSender;
use helpers::command::split_command;
use event::{Event, Envelope};
@@ -35,7 +36,7 @@ impl RandomModule {
}
impl Module for RandomModule {
fn run(&self, _: Sender<Envelope>, receiver: Receiver<Arc<Envelope>>) {
fn run(&self, _: Box<ExtSender<Envelope>>, receiver: Receiver<Arc<Envelope>>) {
let mut rng = rand::thread_rng();
loop {
@@ -43,7 +44,7 @@ impl Module for RandomModule {
Ok(envelope) => {
match envelope.event {
Event::Message { ref message } => {
debug!("Received message... {:?}", message.content);
debug!("Received message from module {:?}... {:?}", envelope.from, message.content);
match split_command(&message.content) {
Some((command, _)) => {
if command == self.prefix {

View File

@@ -6,7 +6,9 @@ use toml::Table;
use {MessageSender, Message, User};
use std::sync::Arc;
use std::sync::mpsc::{Sender, Receiver};
use std::sync::mpsc::Receiver;
use transformable_channels::mpsc::ExtSender;
use event::{Event, Envelope};
pub struct StdinModule {}
@@ -29,7 +31,7 @@ impl StdinModule {
}
impl Module for StdinModule {
fn run(&self, sender: Sender<Envelope>, _: Receiver<Arc<Envelope>>) {
fn run(&self, sender: Box<ExtSender<Envelope>>, _: Receiver<Arc<Envelope>>) {
loop {
let mut input = String::new();
match io::stdin().read_line(&mut input) {