mirror of
https://github.com/shiroyashik/sculptor.git
synced 2025-12-06 04:51:13 +03:00
Added a feature to send pings to subscribers via HTTP requests
This commit is contained in:
parent
81ab2ba724
commit
4bd9a2ab2e
4 changed files with 54 additions and 9 deletions
|
|
@ -14,12 +14,8 @@ use crate::{auth::Token, AppState};
|
||||||
pub fn router() -> Router<AppState> {
|
pub fn router() -> Router<AppState> {
|
||||||
Router::new()
|
Router::new()
|
||||||
.route("/verify", get(verify))
|
.route("/verify", get(verify))
|
||||||
// .route("/ping", post(ping))
|
|
||||||
// .route("/event", post(event))
|
|
||||||
// .route("/toast", post(toast))
|
|
||||||
// .route("/chat", post(chat))
|
|
||||||
// .route("/notice", post(notice))
|
|
||||||
.route("/raw", post(raw))
|
.route("/raw", post(raw))
|
||||||
|
.route("/sub/raw", post(sub_raw))
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Deserialize)]
|
#[derive(Deserialize)]
|
||||||
|
|
@ -80,4 +76,44 @@ async fn raw(
|
||||||
return (StatusCode::NOT_FOUND, "uuid doesnt defined".to_string()).into_response();
|
return (StatusCode::NOT_FOUND, "uuid doesnt defined".to_string()).into_response();
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async fn sub_raw(
|
||||||
|
Token(token): Token,
|
||||||
|
Query(query): Query<UserUuid>,
|
||||||
|
State(state): State<AppState>,
|
||||||
|
body: String,
|
||||||
|
) -> Response {
|
||||||
|
debug!(body = body);
|
||||||
|
match token {
|
||||||
|
Some(t) => {
|
||||||
|
if !state.config.lock().await.verify_token(&t) {
|
||||||
|
return (StatusCode::UNAUTHORIZED, "wrong token".to_string()).into_response()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
None => return (StatusCode::UNAUTHORIZED, "unauthorized".to_string()).into_response(),
|
||||||
|
}
|
||||||
|
let payload = match hex::decode(body) {
|
||||||
|
Ok(v) => v,
|
||||||
|
Err(_) => return (StatusCode::NOT_ACCEPTABLE, "not raw data".to_string()).into_response(),
|
||||||
|
};
|
||||||
|
debug!("{:?}", payload);
|
||||||
|
|
||||||
|
|
||||||
|
match query.uuid {
|
||||||
|
Some(uuid) => {
|
||||||
|
// for only one
|
||||||
|
let tx = match state.broadcasts.get(&uuid) {
|
||||||
|
Some(d) => d,
|
||||||
|
None => return (StatusCode::NOT_FOUND, "unknown uuid".to_string()).into_response(),
|
||||||
|
};
|
||||||
|
match tx.value().send(payload) {
|
||||||
|
Ok(_) => return (StatusCode::OK, "ok".to_string()).into_response(),
|
||||||
|
Err(_) => return (StatusCode::INTERNAL_SERVER_ERROR, "cant send".to_string()).into_response(),
|
||||||
|
};
|
||||||
|
},
|
||||||
|
None => {
|
||||||
|
return (StatusCode::NOT_FOUND, "uuid doesnt defined".to_string()).into_response();
|
||||||
|
},
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -89,3 +89,12 @@ impl<'a> From<C2SMessage<'a>> for Box<[u8]> {
|
||||||
a
|
a
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<'a> C2SMessage<'a> {
|
||||||
|
pub fn to_array(&self) -> Box<[u8]> {
|
||||||
|
<C2SMessage as Into<Box<[u8]>>>::into(self.clone())
|
||||||
|
}
|
||||||
|
pub fn to_vec(&self) -> Vec<u8> {
|
||||||
|
self.to_array().to_vec()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -84,10 +84,10 @@ impl<'a> From<S2CMessage<'a>> for Box<[u8]> {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a> S2CMessage<'a> {
|
impl<'a> S2CMessage<'a> {
|
||||||
pub fn to_array(self) -> Box<[u8]> {
|
pub fn to_array(&self) -> Box<[u8]> {
|
||||||
<S2CMessage as Into<Box<[u8]>>>::into(self)
|
<S2CMessage as Into<Box<[u8]>>>::into(self.clone())
|
||||||
}
|
}
|
||||||
pub fn to_vec(self) -> Vec<u8> {
|
pub fn to_vec(&self) -> Vec<u8> {
|
||||||
self.to_array().to_vec()
|
self.to_array().to_vec()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -78,7 +78,7 @@ async fn handle_socket(mut socket: WebSocket, state: AppState) {
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
debug!("[WebSocket{}] Raw: {newmsg:?}", owner.name());
|
debug!("[WebSocket{}] MSG: {:?}, HEX: {}", owner.name(), newmsg, hex::encode(newmsg.to_vec()));
|
||||||
|
|
||||||
match newmsg {
|
match newmsg {
|
||||||
C2SMessage::Token(token) => {
|
C2SMessage::Token(token) => {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue