Commit a23b1e0d by qlintonger xeno

再次更新+3

parent e98970f3
...@@ -15,3 +15,4 @@ redis_pool = "0.7.0" ...@@ -15,3 +15,4 @@ redis_pool = "0.7.0"
lazy_static = "1.4" lazy_static = "1.4"
dashmap = "4.0.0" dashmap = "4.0.0"
urlencoding = "2.1.3" urlencoding = "2.1.3"
reqwest = { version = "0.11", features = ["multipart", "json"] }
\ No newline at end of file
...@@ -139,7 +139,7 @@ pub(crate) async fn handle_client( ...@@ -139,7 +139,7 @@ pub(crate) async fn handle_client(
_ => { _ => {
let from_id_clone = from_id.clone(); let from_id_clone = from_id.clone();
let connection_time_clone = connection_time.clone(); let connection_time_clone = connection_time.clone();
handle_ws_msg(&data, from_id_clone, &event_sender, connection_time_clone).await; handle_ws_msg(&data, from_id_clone, &event_sender, connection_time_clone, message).await;
} }
} }
} }
......
...@@ -4,12 +4,16 @@ use crate::handles::online_users_update::{online_messages, send_online_users_res ...@@ -4,12 +4,16 @@ use crate::handles::online_users_update::{online_messages, send_online_users_res
use crate::typing::message_typed::ClientMessageData; use crate::typing::message_typed::ClientMessageData;
use tokio::sync::mpsc::UnboundedSender; use tokio::sync::mpsc::UnboundedSender;
use crate::client::ONLINE_USERS; use crate::client::ONLINE_USERS;
use crate::handles::patch_record::send_request;
const CHAT_TYPE_MESSAGE: [&str; 5] = ["ChatTxt", "ChatImage", "ChatFile", "ChatVideo", "ChatAudio"];
pub async fn handle_ws_msg( pub async fn handle_ws_msg(
client_message_data: &ClientMessageData, client_message_data: &ClientMessageData,
from_id: String, from_id: String,
event_sender: &UnboundedSender<Event>, event_sender: &UnboundedSender<Event>,
connection_time: u128, connection_time: u128,
raw_msg: &str
) { ) {
let msg_type = client_message_data.msg_type.clone(); let msg_type = client_message_data.msg_type.clone();
match msg_type.as_str() { match msg_type.as_str() {
...@@ -55,6 +59,20 @@ pub async fn handle_ws_msg( ...@@ -55,6 +59,20 @@ pub async fn handle_ws_msg(
"toID": to_id "toID": to_id
}).to_string(); }).to_string();
// 如果包含chat-msg,则发送额外消息,开启一个新协程
if CHAT_TYPE_MESSAGE.contains(&client_message_data.msg_type.as_str()) {
let from_id_c = from_id.to_string();
let to_id_c = to_id.to_string();
let r_msg = raw_msg.to_string();
tokio::spawn(async move{
if let Err(e) = send_request(from_id_c.as_str(), to_id_c.as_str(), r_msg.as_str()).await {
println!("发送upload-patch请求失败: {:?}", e);
} else {
println!("发送upload-patch请求成功");
}
});
}
println!("收到客户端消息 类型: {} 来自: {} 发送给: {}", msg_type, from_id, to_id); println!("收到客户端消息 类型: {} 来自: {} 发送给: {}", msg_type, from_id, to_id);
if to_id == "-2" { if to_id == "-2" {
......
...@@ -3,3 +3,4 @@ pub mod heartbeat; ...@@ -3,3 +3,4 @@ pub mod heartbeat;
pub mod online_users_update; pub mod online_users_update;
pub mod redis; pub mod redis;
pub mod handle_agora_call; pub mod handle_agora_call;
pub mod patch_record;
use reqwest::{Client, header::{HeaderMap, HeaderValue}};
use std::error::Error;
const URL: &str = "http://localhost:8061/addChatMsg";
pub async fn send_request(
from_id: &str,
to_id: &str,
msg_json: &str,
) -> Result<String, Box<dyn Error>> {
// 创建 multipart 表单
let form = reqwest::multipart::Form::new()
.text("fromId", from_id.to_string())
.text("toId", to_id.to_string())
.text("msgJson", msg_json.to_string())
.text("projectName", "mu")
.text("apiPwd", "Ifar$2_0160_525_Mocp");
// 创建自定义请求头
let mut headers = HeaderMap::new();
headers.insert(
"apiPwd",
HeaderValue::from_str("Ifar$2_0160_525_Mocp")?,
);
headers.insert(
"exchangeToken",
HeaderValue::from_str("Hzk8eQ7pywU8vg2WweQM*3hTxd#2jJp@")?,
);
// 创建 HTTP 客户端
let client = Client::builder()
.default_headers(headers)
.build()?;
// 发送请求
let response = client
.post(URL)
.multipart(form)
.send()
.await?;
// 处理响应
let status = response.status();
let body = response.text().await?;
if status.is_success() {
Ok(body)
} else {
Err(format!("Request failed with status: {}, body: {}", status, body).into())
}
}
\ No newline at end of file
use crate::config::config::STATIC_ADDR;
use std::collections::HashMap; use std::collections::HashMap;
use std::env; use std::env;
use std::net::SocketAddr;
use crate::config::config::STATIC_ADDR;
pub(crate) fn get_connection_params( pub(crate) fn get_connection_params(
connection_url: String, connection_url: String,
...@@ -21,26 +20,28 @@ pub(crate) fn get_connection_params( ...@@ -21,26 +20,28 @@ pub(crate) fn get_connection_params(
} }
} }
// 获取地址的逻辑封装 pub fn get_bind_var(argv_name: String, env_name: String, default_value: String) -> Result<String, Box<dyn std::error::Error>>{
pub fn get_addr() -> Result<String, Box<dyn std::error::Error>> {
// 1. 处理命令行参数 // 1. 处理命令行参数
let mut args = env::args().skip(1); let mut args = env::args().skip(1);
if let Some(pos) = args.position(|arg| arg == "--addr") { if let Some(pos) = args.position(|arg| arg == argv_name) {
// 获取下一个参数值 // 获取下一个参数值
return args.nth(pos) return args.nth(pos)
.ok_or("--addr requires a value".into()) .ok_or("argv requires a value".into())
.and_then(|addr| { .and_then(|addr| {
addr.parse::<SocketAddr>()?;
Ok(addr) Ok(addr)
}); });
} }
// 2. 处理环境变量 // 2. 处理环境变量
if let Ok(env_addr) = env::var("RS_WS_ADDR") { if let Ok(env_addr) = env::var(env_name) {
env_addr.parse::<SocketAddr>()?;
return Ok(env_addr); return Ok(env_addr);
} }
// 3. 返回默认值 // 3. 返回默认值
Ok(STATIC_ADDR.to_string()) Ok(default_value)
}
// 获取地址的逻辑封装
pub fn get_addr() -> Result<String, Box<dyn std::error::Error>> {
Ok(get_bind_var("--addr".to_string(), "RS_WS_ADDR".to_string(), STATIC_ADDR.to_string())?)
} }
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment