Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
ws-rst
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
qlintonger xeno
ws-rst
Commits
a23b1e0d
Commit
a23b1e0d
authored
Feb 26, 2025
by
qlintonger xeno
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
再次更新+3
parent
e98970f3
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
89 additions
and
14 deletions
+89
-14
Cargo.toml
+3
-2
src/client.rs
+1
-1
src/config/config.rs
+2
-1
src/deport.rs
+18
-0
src/handles/mod.rs
+1
-0
src/handles/patch_record.rs
+52
-0
src/utils/utils.rs
+12
-10
No files found.
Cargo.toml
View file @
a23b1e0d
...
@@ -14,4 +14,5 @@ redis = "0.28.2"
...
@@ -14,4 +14,5 @@ redis = "0.28.2"
redis_pool
=
"0.7.0"
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"
\ No newline at end of file
reqwest
=
{
version
=
"0.11"
,
features
=
[
"multipart"
,
"json"
]
}
\ No newline at end of file
src/client.rs
View file @
a23b1e0d
...
@@ -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
;
}
}
}
}
}
}
...
...
src/config/config.rs
View file @
a23b1e0d
pub
const
STATIC_WS_PWD
:
&
str
=
"7ahU8LVba_mbpn_ZX6wyE"
;
pub
const
STATIC_WS_PWD
:
&
str
=
"7ahU8LVba_mbpn_ZX6wyE"
;
pub
const
STATIC_ADDR
:
&
str
=
"localhost:12345"
;
pub
const
STATIC_ADDR
:
&
str
=
"localhost:12345"
;
pub
const
REDIS_ADDR
:
&
str
=
"redis://127.0.0.1/"
;
pub
const
REDIS_ADDR
:
&
str
=
"redis://127.0.0.1/"
;
\ No newline at end of file
src/deport.rs
View file @
a23b1e0d
...
@@ -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"
{
...
...
src/handles/mod.rs
View file @
a23b1e0d
...
@@ -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
;
src/handles/patch_record.rs
0 → 100644
View file @
a23b1e0d
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
src/utils/utils.rs
View file @
a23b1e0d
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
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment