summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYang Zhang <[email protected]>2023-09-07 07:43:11 +0000
committerYang Zhang <[email protected]>2023-09-07 07:43:11 +0000
commitc8a8d5ad893d2d86b90e43d15108cf5ae3c3131f (patch)
tree183b33767a9a2e3f6165d3906191fbc69109e467
parentcfef6a9f884aa99f3a033cfacacacf62741a10e2 (diff)
em 添加 id_task 获取等.
#todo: 应该放在 ex 或 plugmannger 中
-rw-r--r--src/event/manager.rs14
-rw-r--r--src/plugin/example.rs4
2 files changed, 16 insertions, 2 deletions
diff --git a/src/event/manager.rs b/src/event/manager.rs
index 189dde6..4d72644 100644
--- a/src/event/manager.rs
+++ b/src/event/manager.rs
@@ -22,6 +22,7 @@ pub struct EventManager {
ready_event: VecDeque<usize>, // ready event index
cared_event: HashMap<usize, RefCell<LinkedList<(usize, Waker)>>>, // event index -> event handle
pub(crate) ready_task_events: Slab<EventInterest>, // ready event for task
+ pub(crate) id_tasks: HashMap<&'static str, usize>,
}
impl EventManager {
@@ -32,6 +33,7 @@ impl EventManager {
ready_event: VecDeque::new(),
cared_event: HashMap::new(),
ready_task_events: Slab::new(),
+ id_tasks: HashMap::new(),
}
}
@@ -54,6 +56,18 @@ impl EventManager {
}
}
+ pub fn get_task_id(&mut self, task: &'static str) -> usize {
+ // if let Some(id_task) = self.id_tasks.get(task) {
+ // *id_task
+ // } else {
+ // // 如果没有注册过
+ // let id_task = self.ready_task_events.insert(EventInterest::new());
+ // self.id_tasks.insert(task, id_task);
+ // id_task
+ // }
+ self.ready_task_events.insert(EventInterest::new())
+ }
+
pub fn register(&mut self, index: usize, id_task: usize, cx: &mut Context) {
// if already registered
if let Some(list) = self.cared_event.get(&index) {
diff --git a/src/plugin/example.rs b/src/plugin/example.rs
index f9b5ce2..c7fe589 100644
--- a/src/plugin/example.rs
+++ b/src/plugin/example.rs
@@ -50,8 +50,8 @@ impl ExamplePulgin<'_> {
impl ExamplePulgin<'_> {
fn init(&mut self, cx: &mut Context, mut event_mgr: RefMut<'_, EventManager>) {
- // 插入 slab 获取 id_task
- self.id_task = event_mgr.ready_task_events.insert(EventInterest::new());
+ // 获取 id_task
+ self.id_task = event_mgr.get_task_id(self.plugin_name);
self.tcp_opening_event = event_mgr.event2index(BUILDIN_TCP_OPENING_EVENT);
event_mgr.register(self.tcp_opening_event, self.id_task, cx);