diff options
| author | Yang Zhang <[email protected]> | 2023-09-07 07:43:11 +0000 |
|---|---|---|
| committer | Yang Zhang <[email protected]> | 2023-09-07 07:43:11 +0000 |
| commit | c8a8d5ad893d2d86b90e43d15108cf5ae3c3131f (patch) | |
| tree | 183b33767a9a2e3f6165d3906191fbc69109e467 | |
| parent | cfef6a9f884aa99f3a033cfacacacf62741a10e2 (diff) | |
em 添加 id_task 获取等.
#todo: 应该放在 ex 或 plugmannger 中
| -rw-r--r-- | src/event/manager.rs | 14 | ||||
| -rw-r--r-- | src/plugin/example.rs | 4 |
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); |
