summaryrefslogtreecommitdiff
path: root/src/tasks/server.rs
diff options
context:
space:
mode:
authorlittleblack111 <littleblack11111@gmail.com>2025-09-21 15:03:21 +0800
committerlittleblack111 <littleblack11111@gmail.com>2025-09-21 15:03:21 +0800
commitf155278db783770b4fc44931e9ac0cb14131f981 (patch)
tree4f6acf6e9b0944713ded17398168bcdee91859dd /src/tasks/server.rs
parent3fa4e33421e3fa94ca63ceb99856f97f9aac741a (diff)
finish ctx
Diffstat (limited to 'src/tasks/server.rs')
-rw-r--r--src/tasks/server.rs22
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
}
}