From e4a1fbbd596b5466b266a077cddd104933b4fbcf Mon Sep 17 00:00:00 2001 From: littleblack111 Date: Mon, 1 Sep 2025 18:06:03 +0800 Subject: init --- src/client/connector/connectors.rs | 5 +++ src/client/connector/connectors/httpconnector.rs | 45 ++++++++++++++++++++++++ src/client/connector/manager.rs | 12 +++++++ 3 files changed, 62 insertions(+) create mode 100644 src/client/connector/connectors.rs create mode 100644 src/client/connector/connectors/httpconnector.rs create mode 100644 src/client/connector/manager.rs (limited to 'src/client/connector') diff --git a/src/client/connector/connectors.rs b/src/client/connector/connectors.rs new file mode 100644 index 0000000..3810a4a --- /dev/null +++ b/src/client/connector/connectors.rs @@ -0,0 +1,5 @@ +mod httpconnector; + +pub(crate) enum Connectors<'a> { + Http(httpconnector::HTTPConnector<'a>), +} diff --git a/src/client/connector/connectors/httpconnector.rs b/src/client/connector/connectors/httpconnector.rs new file mode 100644 index 0000000..97f79dd --- /dev/null +++ b/src/client/connector/connectors/httpconnector.rs @@ -0,0 +1,45 @@ +use std::net::AddrParseError; + +use crate::connector::*; + +pub(crate) struct HTTPConnector<'a> { + prev: String, + url: &'a str, + channel: Channel, +} + +impl<'a> HTTPConnector<'a> { + fn new(url: &'a str) -> Result { + Ok(Self { + prev: String::new(), + url, + channel: Channel::new(), + }) + } +} + +impl Connection for HTTPConnector<'_> { + type Err = reqwest::Error; + + fn test_connection(&self) -> std::result::Result { + Ok(true) + } + + async fn update(&self) -> Option> { + let res = match reqwest::get(self.url).await { + Ok(resp) => match resp.text().await { + Ok(text) => text, + Err(e) => return Some(Err(e)), + }, + Err(e) => return Some(Err(e)), + }; + + if res == self.prev { + return None; + } + + _ = self.channel.sender.send(res.clone()); // don't care if receiver is dropped + + Some(Ok(res)) + } +} diff --git a/src/client/connector/manager.rs b/src/client/connector/manager.rs new file mode 100644 index 0000000..9ca8a24 --- /dev/null +++ b/src/client/connector/manager.rs @@ -0,0 +1,12 @@ +use crate::connector::connectors; +use std::thread; + +pub(crate) struct ConnectorManager<'a> { + connector: connectors::Connectors<'a>, +} + +impl<'a> ConnectorManager<'a> { + pub(crate) fn new(connector: connectors::Connectors<'a>) -> Self { + Self { connector } + } +} -- cgit v1.2.3