From f155278db783770b4fc44931e9ac0cb14131f981 Mon Sep 17 00:00:00 2001 From: littleblack111 Date: Sun, 21 Sep 2025 15:03:21 +0800 Subject: finish ctx --- src/tasks/server.rs | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) (limited to 'src/tasks/server.rs') 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(pub BaseTask); +pub struct ServerCtx { + stream: TcpStream, +} + +pub struct Task(pub BaseTask); #[derive(Debug, Deserialize, Clone, Copy)] pub enum Name { @@ -16,9 +21,14 @@ impl Display for Name { } } -pub const TASKS: &[Task] = &[Task::(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 for BaseTask { +impl From for BaseTask { fn from(value: Task) -> Self { value.0 } } -impl AsRef> for Task { - fn as_ref(&self) -> &BaseTask { +impl AsRef> for Task { + fn as_ref(&self) -> &BaseTask { &self.0 } } -- cgit v1.2.3