diff options
Diffstat (limited to 'src/plugin')
| -rw-r--r-- | src/plugin/example.rs | 50 | ||||
| -rw-r--r-- | src/plugin/mod.rs | 1 |
2 files changed, 51 insertions, 0 deletions
diff --git a/src/plugin/example.rs b/src/plugin/example.rs new file mode 100644 index 0000000..68fd542 --- /dev/null +++ b/src/plugin/example.rs @@ -0,0 +1,50 @@ +use crate::event::manager::EventHandle; +use crate::packet::packet::Packet; +use crate::session::session::Session; +use std::cell::RefCell; +use std::rc::Rc; + +#[derive(Debug, Clone)] +pub struct ExamplePulgin { + plugin_name: &'static str, + plugin_ctx: Rc<RefCell<String>>, + called_times: u64, +} + +impl ExamplePulgin { + pub fn new(plugin_name: &'static str, plugin_ctx: Rc<RefCell<String>>) -> ExamplePulgin { + ExamplePulgin { + plugin_name, + plugin_ctx, + called_times: 0, + } + } +} + +impl EventHandle for ExamplePulgin { + fn handle(&mut self, index: usize, packet: &Packet, session: Option<Rc<RefCell<Session>>>) { + self.called_times += 1; + self.plugin_ctx.borrow_mut().clear(); + self.plugin_ctx.borrow_mut().push_str("1"); + + println!("{} handle event : {:?}", self.plugin_name, index); + println!( + "{} handle times : {:?}", + self.plugin_name, self.called_times + ); + println!( + "{} handle tuple : {:?}", + self.plugin_name, + packet.get_outer_tuple() + ); + + if session.is_none() { + return; + } + let session = session.unwrap(); + println!("{} handle session : {:?}", self.plugin_name, session); + session + .borrow_mut() + .set_session_exdata("example pulgin".to_string(), "success".to_string()); + } +} diff --git a/src/plugin/mod.rs b/src/plugin/mod.rs new file mode 100644 index 0000000..10f592e --- /dev/null +++ b/src/plugin/mod.rs @@ -0,0 +1 @@ +pub mod example;
\ No newline at end of file |
