diff options
| author | littleblack111 <littleblack11111@gmail.com> | 2025-09-21 15:03:21 +0800 |
|---|---|---|
| committer | littleblack111 <littleblack11111@gmail.com> | 2025-09-21 15:03:21 +0800 |
| commit | f155278db783770b4fc44931e9ac0cb14131f981 (patch) | |
| tree | 4f6acf6e9b0944713ded17398168bcdee91859dd /src/tasks/server.rs | |
| parent | 3fa4e33421e3fa94ca63ceb99856f97f9aac741a (diff) | |
finish ctx
Diffstat (limited to 'src/tasks/server.rs')
| -rw-r--r-- | src/tasks/server.rs | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/src/tasks/server.rs b/src/tasks/server.rs index 0896dca..b1cfc15 100644 --- a/src/tasks/server.rs +++ b/src/tasks/server.rs @@ -2,8 +2,13 @@ use std::fmt::Display; use crate::tasks::{IntoTaskErr, Task as BaseTask, TaskOutput}; use serde::Deserialize; +use tokio::net::TcpStream; -pub struct Task<T = ()>(pub BaseTask<Name, T>); +pub struct ServerCtx { + stream: TcpStream, +} + +pub struct Task(pub BaseTask<Name, ServerCtx>); #[derive(Debug, Deserialize, Clone, Copy)] pub enum Name { @@ -16,9 +21,14 @@ impl Display for Name { } } -pub const TASKS: &[Task] = &[Task::<i32>(BaseTask { name: Name::GetIp, exec: get_ip })]; +pub const TASKS: &[Task] = &[Task(BaseTask { name: Name::GetIp, exec: get_ip })]; -fn get_ip(cmds: &[&str], _: i32) -> TaskOutput {} +fn get_ip(_: &[&str], ctx: &ServerCtx) -> TaskOutput { + match ctx.stream.peer_addr() { + Ok(addr) => Ok(addr.ip().to_string()), + Err(e) => Err(e.to_string()), + } +} impl TryFrom<&str> for &'static Task { type Error = IntoTaskErr; @@ -33,14 +43,14 @@ impl TryFrom<&str> for &'static Task { } } -impl From<Task> for BaseTask<Name> { +impl From<Task> for BaseTask<Name, ServerCtx> { fn from(value: Task) -> Self { value.0 } } -impl AsRef<BaseTask<Name>> for Task { - fn as_ref(&self) -> &BaseTask<Name> { +impl AsRef<BaseTask<Name, ServerCtx>> for Task { + fn as_ref(&self) -> &BaseTask<Name, ServerCtx> { &self.0 } } |
