summaryrefslogtreecommitdiff
path: root/src/plugin
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugin')
-rw-r--r--src/plugin/example.rs50
-rw-r--r--src/plugin/mod.rs1
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