From d0f8cd4619219db00664fe09b35a398698f0099e Mon Sep 17 00:00:00 2001 From: "Hatter Jiang@Pixelbook" Date: Mon, 17 May 2021 23:10:07 +0800 Subject: [PATCH] feat: add /time --- Cargo.lock | 60 ++++++++++++++++++++++++++++++++++++++++++++ Cargo.toml | 4 ++- src/main.rs | 3 ++- src/slash_handles.rs | 16 ++++++++++++ 4 files changed, 81 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6c70ebd..05640e7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -45,6 +45,19 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "chrono" +version = "0.4.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73" +dependencies = [ + "libc", + "num-integer", + "num-traits", + "time", + "winapi", +] + [[package]] name = "cpufeatures" version = "0.1.1" @@ -313,6 +326,25 @@ dependencies = [ "winapi", ] +[[package]] +name = "num-integer" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" +dependencies = [ + "autocfg", +] + [[package]] name = "num_cpus" version = "1.13.0" @@ -425,6 +457,12 @@ dependencies = [ "unicode-xid", ] +[[package]] +name = "quick-error" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" + [[package]] name = "quote" version = "1.0.9" @@ -497,12 +535,14 @@ dependencies = [ name = "room-rs" version = "0.1.0" dependencies = [ + "chrono", "futures-channel", "futures-util", "lazy_static", "rust_util", "serde", "serde_json", + "simpledateformat", "tokio", "tokio-tungstenite", "tungstenite", @@ -591,6 +631,16 @@ dependencies = [ "libc", ] +[[package]] +name = "simpledateformat" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d06fa9a6e21926f4eaf8d506dfac4243b473ca49491dc8b4feb7668cc17e0084" +dependencies = [ + "chrono", + "quick-error", +] + [[package]] name = "slab" version = "0.4.3" @@ -655,6 +705,16 @@ dependencies = [ "syn", ] +[[package]] +name = "time" +version = "0.1.43" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca8a50ef2360fbd1eeb0ecd46795a87a19024eb4b53c5dc916ca1fd95fe62438" +dependencies = [ + "libc", + "winapi", +] + [[package]] name = "tinyvec" version = "1.2.0" diff --git a/Cargo.toml b/Cargo.toml index abd8208..e514e5f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,9 +8,11 @@ edition = "2018" [dependencies] rust_util = "0.6" +simpledateformat = "0.1" +chrono = "0.4" tungstenite = {version = "0.13", default-features = false} tokio-tungstenite = "0.14" -tokio = { version = "1.0.0", features = ["full"]} +tokio = { version = "1.0", features = ["full"]} futures-util = "0.3" lazy_static = "1.4" futures-channel = "0.3" diff --git a/src/main.rs b/src/main.rs index d0c6826..d64abfa 100644 --- a/src/main.rs +++ b/src/main.rs @@ -17,7 +17,7 @@ use tungstenite::protocol::Message; use rust_util::XResult; use crate::types::{PeerMap, RoomMap, Tx}; use crate::msg::{RoomMessageDown, RoomMessage, RoomMessageType, RoomMessageDownType}; -use crate::slash_handles::{HandleContext, HandleTextMessage}; +use crate::slash_handles::{HandleContext, HandleTextMessage, HandleTextMessageTime}; use crate::slash_handles::{HandleTextMessageExit, HandleTextMessageStatics}; use crate::slash_handles::{HandleTextMessagePass, HandleTextMessageRoom}; use crate::slash_handles::{HandleTextMessageRooms, HandleTextMessageVersion}; @@ -34,6 +34,7 @@ lazy_static! { Box::new(HandleTextMessageRooms), Box::new(HandleTextMessageRoom), Box::new(HandleTextMessageVersion), + Box::new(HandleTextMessageTime), ]; handles }; diff --git a/src/slash_handles.rs b/src/slash_handles.rs index 996ae59..cc4e9eb 100644 --- a/src/slash_handles.rs +++ b/src/slash_handles.rs @@ -3,6 +3,7 @@ use std::net::SocketAddr; use tungstenite::Message; use crate::msg::RoomMessageDown; use crate::{NAME, VERSION}; +use chrono::Local; #[derive(Debug, Clone)] pub struct HandleContext { @@ -125,3 +126,18 @@ impl HandleTextMessage for HandleTextMessageVersion { tx.unbounded_send(Message::Text(format!("{} - v{}", NAME, VERSION))).ok(); } } + +pub struct HandleTextMessageTime; +impl HandleTextMessage for HandleTextMessageTime { + fn is_matches(&self, _handle_context: &mut HandleContext, _tx: &Tx, _addr: SocketAddr, msg: &str) -> bool { + msg == "/time" + } + + fn handle(&self, _handle_context: &mut HandleContext, tx: &Tx, _addr: SocketAddr, _msg: &str) { + simpledateformat::fmt("yyyy-MM-dd HH:mm:ss z").map( + |f| { + tx.unbounded_send(Message::Text(format!("Time: {}", f.format(&Local::now())))).ok(); + } + ).ok(); + } +}