add: client streams api

fix: mobile chats ui
This commit is contained in:
trisua 2025-05-01 23:35:40 -04:00
parent 094dd5fdb5
commit 58d206eb81
12 changed files with 152 additions and 19 deletions

View file

@ -454,7 +454,7 @@ pub async fn handle_socket(socket: WebSocket, db: DataManager, user_id: String,
let (mut sink, mut stream) = socket.split();
// get channel permissions
let channel = format!("{user_id}_{stream_id}");
let channel = format!("{user_id}/{stream_id}");
// ...
let mut recv_task = tokio::spawn(async move {
@ -510,8 +510,8 @@ pub async fn handle_socket(socket: WebSocket, db: DataManager, user_id: String,
let mut heartbeat = tokio::time::interval(Duration::from_secs(10));
loop {
con.publish::<String, String, ()>(
format!("{channel_c}_heartbeat"),
con.publish::<&str, String, ()>(
&channel_c,
serde_json::to_string(&SocketMessage {
method: SocketMethod::Forward(PacketType::Ping),
data: "Ping".to_string(),
@ -532,3 +532,33 @@ pub async fn handle_socket(socket: WebSocket, db: DataManager, user_id: String,
heartbeat_task.abort(); // kill
tracing::info!("socket terminate");
}
pub async fn post_to_socket_request(
jar: CookieJar,
Extension(data): Extension<State>,
Path((user_id, id)): Path<(String, String)>,
Json(msg): Json<SocketMessage>,
) -> impl IntoResponse {
let data = &(data.read().await).0;
let user = match get_user_from_token!(jar, data) {
Some(ua) => ua,
None => return Json(Error::NotAllowed.into()),
};
if user.id.to_string() != user_id {
return Json(Error::NotAllowed.into());
}
let mut con = data.2.get_con().await;
con.publish::<String, String, ()>(
format!("{user_id}/{id}"),
serde_json::to_string(&msg).unwrap(),
)
.unwrap();
Json(ApiReturn {
ok: true,
message: "Data sent to socket".to_string(),
payload: (),
})
}