cargo fmt + clippy fixes, remove unused voice_membership.rs
This commit is contained in:
parent
9821814240
commit
c34ed2a192
13 changed files with 108 additions and 245 deletions
|
|
@ -99,6 +99,7 @@ pub async fn handle_channel_create(
|
||||||
let created = channels::create(&state.channels, &channel_id, &channel_name, kind.clone()).await;
|
let created = channels::create(&state.channels, &channel_id, &channel_name, kind.clone()).await;
|
||||||
|
|
||||||
// Persist to DB (best-effort, log and continue on failure).
|
// Persist to DB (best-effort, log and continue on failure).
|
||||||
|
#[allow(clippy::collapsible_if)]
|
||||||
if created {
|
if created {
|
||||||
if let Err(e) = state
|
if let Err(e) = state
|
||||||
.storage
|
.storage
|
||||||
|
|
@ -204,6 +205,7 @@ pub async fn handle_channel_delete(
|
||||||
let existed = channels::delete(&state.channels, &req.channel_id).await;
|
let existed = channels::delete(&state.channels, &req.channel_id).await;
|
||||||
|
|
||||||
// Remove from DB (best-effort).
|
// Remove from DB (best-effort).
|
||||||
|
#[allow(clippy::collapsible_if)]
|
||||||
if existed {
|
if existed {
|
||||||
if let Err(e) = state.storage.delete_channel(&req.channel_id).await {
|
if let Err(e) = state.storage.delete_channel(&req.channel_id).await {
|
||||||
warn!("failed to remove channel from storage: {e}");
|
warn!("failed to remove channel from storage: {e}");
|
||||||
|
|
|
||||||
|
|
@ -110,8 +110,9 @@ pub async fn join(
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(tx) = &state.voice_member_tx {
|
if let Some(tx) = &state.voice_member_tx
|
||||||
if let Some(sess) = session::get(&state.sessions, session_id).await {
|
&& let Some(sess) = session::get(&state.sessions, session_id).await
|
||||||
|
{
|
||||||
let event = serde_json::json!({
|
let event = serde_json::json!({
|
||||||
"type": "joined",
|
"type": "joined",
|
||||||
"channel_id": channel_id,
|
"channel_id": channel_id,
|
||||||
|
|
@ -120,7 +121,6 @@ pub async fn join(
|
||||||
});
|
});
|
||||||
let _ = tx.send(event.to_string());
|
let _ = tx.send(event.to_string());
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
info!("session {} joined {channel_id}", &session_id[..8]);
|
info!("session {} joined {channel_id}", &session_id[..8]);
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,11 @@ use anyhow::Result;
|
||||||
use tokio::io::{AsyncRead, AsyncWrite};
|
use tokio::io::{AsyncRead, AsyncWrite};
|
||||||
use tracing::info;
|
use tracing::info;
|
||||||
|
|
||||||
use crate::{domain::{channels, session}, net::state::State, proto::SessionCrypto};
|
use crate::{
|
||||||
|
domain::{channels, session},
|
||||||
|
net::state::State,
|
||||||
|
proto::SessionCrypto,
|
||||||
|
};
|
||||||
|
|
||||||
use super::{broadcast_leave, set_channel};
|
use super::{broadcast_leave, set_channel};
|
||||||
|
|
||||||
|
|
@ -22,8 +26,9 @@ pub async fn leave(
|
||||||
set_channel(state, session_id, None).await;
|
set_channel(state, session_id, None).await;
|
||||||
broadcast_leave(state, channel_id, session_id).await;
|
broadcast_leave(state, channel_id, session_id).await;
|
||||||
|
|
||||||
if let Some(tx) = &state.voice_member_tx {
|
if let Some(tx) = &state.voice_member_tx
|
||||||
if let Some(ref uid) = user_id {
|
&& let Some(ref uid) = user_id
|
||||||
|
{
|
||||||
let event = serde_json::json!({
|
let event = serde_json::json!({
|
||||||
"type": "left",
|
"type": "left",
|
||||||
"channel_id": channel_id,
|
"channel_id": channel_id,
|
||||||
|
|
@ -32,7 +37,6 @@ pub async fn leave(
|
||||||
});
|
});
|
||||||
let _ = tx.send(event.to_string());
|
let _ = tx.send(event.to_string());
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
info!("session {} left {channel_id}", &session_id[..8]);
|
info!("session {} left {channel_id}", &session_id[..8]);
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|
|
||||||
|
|
@ -36,36 +36,40 @@ pub async fn dispatch<S: AsyncRead + AsyncWrite + Unpin>(
|
||||||
}
|
}
|
||||||
PacketId::JoinChannel => {
|
PacketId::JoinChannel => {
|
||||||
let m = JoinChannelPayload::decode(payload)?;
|
let m = JoinChannelPayload::decode(payload)?;
|
||||||
channel::join(ctx.stream, ctx.seq, session_id, &m.channel_id, ctx.crypto, ctx.state)
|
channel::join(
|
||||||
.await?;
|
|
||||||
}
|
|
||||||
PacketId::LeaveChannel => {
|
|
||||||
let m = LeaveChannelPayload::decode(payload)?;
|
|
||||||
channel::leave(ctx.stream, ctx.seq, session_id, &m.channel_id, ctx.crypto, ctx.state)
|
|
||||||
.await?;
|
|
||||||
}
|
|
||||||
PacketId::ChannelCreate => {
|
|
||||||
channel::handle_channel_create(
|
|
||||||
ctx.stream,
|
ctx.stream,
|
||||||
ctx.seq,
|
ctx.seq,
|
||||||
session_id,
|
session_id,
|
||||||
payload,
|
&m.channel_id,
|
||||||
ctx.crypto,
|
ctx.crypto,
|
||||||
ctx.state,
|
ctx.state,
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
}
|
}
|
||||||
PacketId::ChannelDelete => {
|
PacketId::LeaveChannel => {
|
||||||
channel::handle_channel_delete(
|
let m = LeaveChannelPayload::decode(payload)?;
|
||||||
|
channel::leave(
|
||||||
ctx.stream,
|
ctx.stream,
|
||||||
ctx.seq,
|
ctx.seq,
|
||||||
session_id,
|
session_id,
|
||||||
payload,
|
&m.channel_id,
|
||||||
ctx.crypto,
|
ctx.crypto,
|
||||||
ctx.state,
|
ctx.state,
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
}
|
}
|
||||||
|
PacketId::ChannelCreate => {
|
||||||
|
channel::handle_channel_create(
|
||||||
|
ctx.stream, ctx.seq, session_id, payload, ctx.crypto, ctx.state,
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
}
|
||||||
|
PacketId::ChannelDelete => {
|
||||||
|
channel::handle_channel_delete(
|
||||||
|
ctx.stream, ctx.seq, session_id, payload, ctx.crypto, ctx.state,
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
}
|
||||||
PacketId::ChannelList => {
|
PacketId::ChannelList => {
|
||||||
channel::handle_channel_list(ctx.stream, ctx.seq, session_id, ctx.crypto, ctx.state)
|
channel::handle_channel_list(ctx.stream, ctx.seq, session_id, ctx.crypto, ctx.state)
|
||||||
.await?;
|
.await?;
|
||||||
|
|
@ -76,67 +80,37 @@ pub async fn dispatch<S: AsyncRead + AsyncWrite + Unpin>(
|
||||||
}
|
}
|
||||||
PacketId::DmStart => {
|
PacketId::DmStart => {
|
||||||
direct_message::handle_dm_start(
|
direct_message::handle_dm_start(
|
||||||
ctx.stream,
|
ctx.stream, ctx.seq, session_id, payload, ctx.crypto, ctx.state,
|
||||||
ctx.seq,
|
|
||||||
session_id,
|
|
||||||
payload,
|
|
||||||
ctx.crypto,
|
|
||||||
ctx.state,
|
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
}
|
}
|
||||||
PacketId::DmMessage => {
|
PacketId::DmMessage => {
|
||||||
direct_message::handle_dm_message(
|
direct_message::handle_dm_message(
|
||||||
ctx.stream,
|
ctx.stream, ctx.seq, session_id, payload, ctx.crypto, ctx.state,
|
||||||
ctx.seq,
|
|
||||||
session_id,
|
|
||||||
payload,
|
|
||||||
ctx.crypto,
|
|
||||||
ctx.state,
|
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
}
|
}
|
||||||
PacketId::DmHistory => {
|
PacketId::DmHistory => {
|
||||||
direct_message::handle_dm_history(
|
direct_message::handle_dm_history(
|
||||||
ctx.stream,
|
ctx.stream, ctx.seq, session_id, payload, ctx.crypto, ctx.state,
|
||||||
ctx.seq,
|
|
||||||
session_id,
|
|
||||||
payload,
|
|
||||||
ctx.crypto,
|
|
||||||
ctx.state,
|
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
}
|
}
|
||||||
PacketId::DmReadAck => {
|
PacketId::DmReadAck => {
|
||||||
direct_message::handle_dm_read_ack(
|
direct_message::handle_dm_read_ack(
|
||||||
ctx.stream,
|
ctx.stream, ctx.seq, session_id, payload, ctx.crypto, ctx.state,
|
||||||
ctx.seq,
|
|
||||||
session_id,
|
|
||||||
payload,
|
|
||||||
ctx.crypto,
|
|
||||||
ctx.state,
|
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
}
|
}
|
||||||
PacketId::GuildCreate => {
|
PacketId::GuildCreate => {
|
||||||
guild::handle_guild_create(
|
guild::handle_guild_create(
|
||||||
ctx.stream,
|
ctx.stream, ctx.seq, session_id, payload, ctx.crypto, ctx.state,
|
||||||
ctx.seq,
|
|
||||||
session_id,
|
|
||||||
payload,
|
|
||||||
ctx.crypto,
|
|
||||||
ctx.state,
|
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
}
|
}
|
||||||
PacketId::GuildDelete => {
|
PacketId::GuildDelete => {
|
||||||
guild::handle_guild_delete(
|
guild::handle_guild_delete(
|
||||||
ctx.stream,
|
ctx.stream, ctx.seq, session_id, payload, ctx.crypto, ctx.state,
|
||||||
ctx.seq,
|
|
||||||
session_id,
|
|
||||||
payload,
|
|
||||||
ctx.crypto,
|
|
||||||
ctx.state,
|
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
}
|
}
|
||||||
|
|
@ -146,209 +120,115 @@ pub async fn dispatch<S: AsyncRead + AsyncWrite + Unpin>(
|
||||||
}
|
}
|
||||||
PacketId::GuildMemberJoin => {
|
PacketId::GuildMemberJoin => {
|
||||||
guild::handle_guild_member_join(
|
guild::handle_guild_member_join(
|
||||||
ctx.stream,
|
ctx.stream, ctx.seq, session_id, payload, ctx.crypto, ctx.state,
|
||||||
ctx.seq,
|
|
||||||
session_id,
|
|
||||||
payload,
|
|
||||||
ctx.crypto,
|
|
||||||
ctx.state,
|
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
}
|
}
|
||||||
PacketId::GuildMemberLeave => {
|
PacketId::GuildMemberLeave => {
|
||||||
guild::handle_guild_member_leave(
|
guild::handle_guild_member_leave(
|
||||||
ctx.stream,
|
ctx.stream, ctx.seq, session_id, payload, ctx.crypto, ctx.state,
|
||||||
ctx.seq,
|
|
||||||
session_id,
|
|
||||||
payload,
|
|
||||||
ctx.crypto,
|
|
||||||
ctx.state,
|
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
}
|
}
|
||||||
PacketId::GuildMemberKick => {
|
PacketId::GuildMemberKick => {
|
||||||
guild::handle_guild_member_kick(
|
guild::handle_guild_member_kick(
|
||||||
ctx.stream,
|
ctx.stream, ctx.seq, session_id, payload, ctx.crypto, ctx.state,
|
||||||
ctx.seq,
|
|
||||||
session_id,
|
|
||||||
payload,
|
|
||||||
ctx.crypto,
|
|
||||||
ctx.state,
|
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
}
|
}
|
||||||
PacketId::RoleCreate => {
|
PacketId::RoleCreate => {
|
||||||
guild::handle_role_create(
|
guild::handle_role_create(
|
||||||
ctx.stream,
|
ctx.stream, ctx.seq, session_id, payload, ctx.crypto, ctx.state,
|
||||||
ctx.seq,
|
|
||||||
session_id,
|
|
||||||
payload,
|
|
||||||
ctx.crypto,
|
|
||||||
ctx.state,
|
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
}
|
}
|
||||||
PacketId::RoleDelete => {
|
PacketId::RoleDelete => {
|
||||||
guild::handle_role_delete(
|
guild::handle_role_delete(
|
||||||
ctx.stream,
|
ctx.stream, ctx.seq, session_id, payload, ctx.crypto, ctx.state,
|
||||||
ctx.seq,
|
|
||||||
session_id,
|
|
||||||
payload,
|
|
||||||
ctx.crypto,
|
|
||||||
ctx.state,
|
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
}
|
}
|
||||||
PacketId::InviteCreate => {
|
PacketId::InviteCreate => {
|
||||||
guild::handle_invite_create(
|
guild::handle_invite_create(
|
||||||
ctx.stream,
|
ctx.stream, ctx.seq, session_id, payload, ctx.crypto, ctx.state,
|
||||||
ctx.seq,
|
|
||||||
session_id,
|
|
||||||
payload,
|
|
||||||
ctx.crypto,
|
|
||||||
ctx.state,
|
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
}
|
}
|
||||||
PacketId::InviteAccept => {
|
PacketId::InviteAccept => {
|
||||||
guild::handle_invite_accept(
|
guild::handle_invite_accept(
|
||||||
ctx.stream,
|
ctx.stream, ctx.seq, session_id, payload, ctx.crypto, ctx.state,
|
||||||
ctx.seq,
|
|
||||||
session_id,
|
|
||||||
payload,
|
|
||||||
ctx.crypto,
|
|
||||||
ctx.state,
|
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
}
|
}
|
||||||
PacketId::InviteDelete => {
|
PacketId::InviteDelete => {
|
||||||
guild::handle_invite_delete(
|
guild::handle_invite_delete(
|
||||||
ctx.stream,
|
ctx.stream, ctx.seq, session_id, payload, ctx.crypto, ctx.state,
|
||||||
ctx.seq,
|
|
||||||
session_id,
|
|
||||||
payload,
|
|
||||||
ctx.crypto,
|
|
||||||
ctx.state,
|
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
}
|
}
|
||||||
PacketId::GuildAuditLogFetch => {
|
PacketId::GuildAuditLogFetch => {
|
||||||
guild::handle_audit_log_fetch(
|
guild::handle_audit_log_fetch(
|
||||||
ctx.stream,
|
ctx.stream, ctx.seq, session_id, payload, ctx.crypto, ctx.state,
|
||||||
ctx.seq,
|
|
||||||
session_id,
|
|
||||||
payload,
|
|
||||||
ctx.crypto,
|
|
||||||
ctx.state,
|
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
}
|
}
|
||||||
PacketId::GuildMemberListFetch => {
|
PacketId::GuildMemberListFetch => {
|
||||||
guild::handle_member_list_fetch(
|
guild::handle_member_list_fetch(
|
||||||
ctx.stream,
|
ctx.stream, ctx.seq, session_id, payload, ctx.crypto, ctx.state,
|
||||||
ctx.seq,
|
|
||||||
session_id,
|
|
||||||
payload,
|
|
||||||
ctx.crypto,
|
|
||||||
ctx.state,
|
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
}
|
}
|
||||||
PacketId::GuildRoleAssign => {
|
PacketId::GuildRoleAssign => {
|
||||||
guild::handle_role_assign(
|
guild::handle_role_assign(
|
||||||
ctx.stream,
|
ctx.stream, ctx.seq, session_id, payload, ctx.crypto, ctx.state,
|
||||||
ctx.seq,
|
|
||||||
session_id,
|
|
||||||
payload,
|
|
||||||
ctx.crypto,
|
|
||||||
ctx.state,
|
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
}
|
}
|
||||||
PacketId::GuildRoleUnassign => {
|
PacketId::GuildRoleUnassign => {
|
||||||
guild::handle_role_unassign(
|
guild::handle_role_unassign(
|
||||||
ctx.stream,
|
ctx.stream, ctx.seq, session_id, payload, ctx.crypto, ctx.state,
|
||||||
ctx.seq,
|
|
||||||
session_id,
|
|
||||||
payload,
|
|
||||||
ctx.crypto,
|
|
||||||
ctx.state,
|
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
}
|
}
|
||||||
PacketId::GuildRoleListFetch => {
|
PacketId::GuildRoleListFetch => {
|
||||||
guild::handle_role_list_fetch(
|
guild::handle_role_list_fetch(
|
||||||
ctx.stream,
|
ctx.stream, ctx.seq, session_id, payload, ctx.crypto, ctx.state,
|
||||||
ctx.seq,
|
|
||||||
session_id,
|
|
||||||
payload,
|
|
||||||
ctx.crypto,
|
|
||||||
ctx.state,
|
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
}
|
}
|
||||||
PacketId::PresenceUpdate => {
|
PacketId::PresenceUpdate => {
|
||||||
content::presence::handle_presence_update(
|
content::presence::handle_presence_update(
|
||||||
ctx.stream,
|
ctx.stream, ctx.seq, session_id, payload, ctx.crypto, ctx.state,
|
||||||
ctx.seq,
|
|
||||||
session_id,
|
|
||||||
payload,
|
|
||||||
ctx.crypto,
|
|
||||||
ctx.state,
|
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
}
|
}
|
||||||
PacketId::PresenceSync => {
|
PacketId::PresenceSync => {
|
||||||
content::presence::handle_presence_sync(
|
content::presence::handle_presence_sync(
|
||||||
ctx.stream,
|
ctx.stream, ctx.seq, session_id, ctx.crypto, ctx.state,
|
||||||
ctx.seq,
|
|
||||||
session_id,
|
|
||||||
ctx.crypto,
|
|
||||||
ctx.state,
|
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
}
|
}
|
||||||
PacketId::FriendRequest => {
|
PacketId::FriendRequest => {
|
||||||
friends::handle_friend_request(
|
friends::handle_friend_request(
|
||||||
ctx.stream,
|
ctx.stream, ctx.seq, session_id, payload, ctx.crypto, ctx.state,
|
||||||
ctx.seq,
|
|
||||||
session_id,
|
|
||||||
payload,
|
|
||||||
ctx.crypto,
|
|
||||||
ctx.state,
|
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
}
|
}
|
||||||
PacketId::FriendAccept => {
|
PacketId::FriendAccept => {
|
||||||
friends::handle_friend_accept(
|
friends::handle_friend_accept(
|
||||||
ctx.stream,
|
ctx.stream, ctx.seq, session_id, payload, ctx.crypto, ctx.state,
|
||||||
ctx.seq,
|
|
||||||
session_id,
|
|
||||||
payload,
|
|
||||||
ctx.crypto,
|
|
||||||
ctx.state,
|
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
}
|
}
|
||||||
PacketId::FriendDecline => {
|
PacketId::FriendDecline => {
|
||||||
friends::handle_friend_decline(
|
friends::handle_friend_decline(
|
||||||
ctx.stream,
|
ctx.stream, ctx.seq, session_id, payload, ctx.crypto, ctx.state,
|
||||||
ctx.seq,
|
|
||||||
session_id,
|
|
||||||
payload,
|
|
||||||
ctx.crypto,
|
|
||||||
ctx.state,
|
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
}
|
}
|
||||||
PacketId::FriendRemove => {
|
PacketId::FriendRemove => {
|
||||||
friends::handle_friend_remove(
|
friends::handle_friend_remove(
|
||||||
ctx.stream,
|
ctx.stream, ctx.seq, session_id, payload, ctx.crypto, ctx.state,
|
||||||
ctx.seq,
|
|
||||||
session_id,
|
|
||||||
payload,
|
|
||||||
ctx.crypto,
|
|
||||||
ctx.state,
|
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
}
|
}
|
||||||
|
|
@ -358,23 +238,13 @@ pub async fn dispatch<S: AsyncRead + AsyncWrite + Unpin>(
|
||||||
}
|
}
|
||||||
PacketId::BlockUser => {
|
PacketId::BlockUser => {
|
||||||
friends::handle_block_user(
|
friends::handle_block_user(
|
||||||
ctx.stream,
|
ctx.stream, ctx.seq, session_id, payload, ctx.crypto, ctx.state,
|
||||||
ctx.seq,
|
|
||||||
session_id,
|
|
||||||
payload,
|
|
||||||
ctx.crypto,
|
|
||||||
ctx.state,
|
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
}
|
}
|
||||||
PacketId::UnblockUser => {
|
PacketId::UnblockUser => {
|
||||||
friends::handle_unblock_user(
|
friends::handle_unblock_user(
|
||||||
ctx.stream,
|
ctx.stream, ctx.seq, session_id, payload, ctx.crypto, ctx.state,
|
||||||
ctx.seq,
|
|
||||||
session_id,
|
|
||||||
payload,
|
|
||||||
ctx.crypto,
|
|
||||||
ctx.state,
|
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
}
|
}
|
||||||
|
|
@ -401,12 +271,7 @@ pub async fn dispatch<S: AsyncRead + AsyncWrite + Unpin>(
|
||||||
}
|
}
|
||||||
PacketId::ReadReceipt => {
|
PacketId::ReadReceipt => {
|
||||||
content::handle_read_receipt(
|
content::handle_read_receipt(
|
||||||
ctx.stream,
|
ctx.stream, ctx.seq, session_id, payload, ctx.crypto, ctx.state,
|
||||||
ctx.seq,
|
|
||||||
session_id,
|
|
||||||
payload,
|
|
||||||
ctx.crypto,
|
|
||||||
ctx.state,
|
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,11 @@ pub async fn handle_friend_decline(
|
||||||
stream,
|
stream,
|
||||||
PacketId::FriendDecline,
|
PacketId::FriendDecline,
|
||||||
seq,
|
seq,
|
||||||
&to_payload(&SimpleResponsePayload { ok: true, user_id: None, role_id: None }),
|
&to_payload(&SimpleResponsePayload {
|
||||||
|
ok: true,
|
||||||
|
user_id: None,
|
||||||
|
role_id: None,
|
||||||
|
}),
|
||||||
crypto,
|
crypto,
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
|
|
|
||||||
|
|
@ -33,7 +33,11 @@ pub async fn handle_friend_remove(
|
||||||
stream,
|
stream,
|
||||||
PacketId::FriendRemove,
|
PacketId::FriendRemove,
|
||||||
seq,
|
seq,
|
||||||
&to_payload(&SimpleResponsePayload { ok: true, user_id: None, role_id: None }),
|
&to_payload(&SimpleResponsePayload {
|
||||||
|
ok: true,
|
||||||
|
user_id: None,
|
||||||
|
role_id: None,
|
||||||
|
}),
|
||||||
crypto,
|
crypto,
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
|
|
@ -62,7 +66,11 @@ pub async fn handle_block_user(
|
||||||
stream,
|
stream,
|
||||||
PacketId::BlockUser,
|
PacketId::BlockUser,
|
||||||
seq,
|
seq,
|
||||||
&to_payload(&SimpleResponsePayload { ok: true, user_id: None, role_id: None }),
|
&to_payload(&SimpleResponsePayload {
|
||||||
|
ok: true,
|
||||||
|
user_id: None,
|
||||||
|
role_id: None,
|
||||||
|
}),
|
||||||
crypto,
|
crypto,
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
|
|
@ -91,7 +99,11 @@ pub async fn handle_unblock_user(
|
||||||
stream,
|
stream,
|
||||||
PacketId::UnblockUser,
|
PacketId::UnblockUser,
|
||||||
seq,
|
seq,
|
||||||
&to_payload(&SimpleResponsePayload { ok: true, user_id: None, role_id: None }),
|
&to_payload(&SimpleResponsePayload {
|
||||||
|
ok: true,
|
||||||
|
user_id: None,
|
||||||
|
role_id: None,
|
||||||
|
}),
|
||||||
crypto,
|
crypto,
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,9 @@ use tokio::io::{AsyncRead, AsyncWrite};
|
||||||
use crate::{
|
use crate::{
|
||||||
domain::session,
|
domain::session,
|
||||||
net::{io, state::State},
|
net::{io, state::State},
|
||||||
proto::{GuildInfo, GuildListPayload, PacketId, SessionCrypto, UserRoleUpdatePayload, to_payload},
|
proto::{
|
||||||
|
GuildInfo, GuildListPayload, PacketId, SessionCrypto, UserRoleUpdatePayload, to_payload,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
pub async fn handle_guild_list(
|
pub async fn handle_guild_list(
|
||||||
|
|
|
||||||
|
|
@ -83,7 +83,11 @@ pub async fn run(
|
||||||
return Err(anyhow::anyhow!("auth failed"));
|
return Err(anyhow::anyhow!("auth failed"));
|
||||||
}
|
}
|
||||||
|
|
||||||
if state.storage.is_banned(&hex::encode(&msg.client_pubkey)).await? {
|
if state
|
||||||
|
.storage
|
||||||
|
.is_banned(&hex::encode(&msg.client_pubkey))
|
||||||
|
.await?
|
||||||
|
{
|
||||||
state.metrics.inc(&state.metrics.auth_failures);
|
state.metrics.inc(&state.metrics.auth_failures);
|
||||||
io::send_error(stream, seq, proto::ErrorCode::AuthFailed, "banned").await?;
|
io::send_error(stream, seq, proto::ErrorCode::AuthFailed, "banned").await?;
|
||||||
return Err(anyhow::anyhow!("banned"));
|
return Err(anyhow::anyhow!("banned"));
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
use std::sync::atomic::AtomicUsize;
|
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use tokio::sync::{broadcast, RwLock};
|
use std::sync::atomic::AtomicUsize;
|
||||||
|
use tokio::sync::{RwLock, broadcast};
|
||||||
|
|
||||||
use crate::admin::metrics::Metrics;
|
use crate::admin::metrics::Metrics;
|
||||||
use crate::bootstrap::server_identity::ServerIdentity;
|
use crate::bootstrap::server_identity::ServerIdentity;
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
use chacha20poly1305::{
|
use chacha20poly1305::{
|
||||||
aead::{Aead, Payload},
|
|
||||||
ChaCha20Poly1305, Key, KeyInit, Nonce,
|
ChaCha20Poly1305, Key, KeyInit, Nonce,
|
||||||
|
aead::{Aead, Payload},
|
||||||
};
|
};
|
||||||
|
|
||||||
pub(super) fn make_nonce(cid: &[u8; 8], seq: u64) -> [u8; 12] {
|
pub(super) fn make_nonce(cid: &[u8; 8], seq: u64) -> [u8; 12] {
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ pub use crypto::SessionCrypto;
|
||||||
|
|
||||||
// Re-export everything so `crate::proto::X` works as before
|
// Re-export everything so `crate::proto::X` works as before
|
||||||
pub use framing::{encode_packet, to_payload};
|
pub use framing::{encode_packet, to_payload};
|
||||||
pub use packet::{flags, ErrorCode, PacketHeader, PacketId};
|
pub use packet::{ErrorCode, PacketHeader, PacketId, flags};
|
||||||
|
|
||||||
// ─── Backward-compat type aliases ────────────────────────────────
|
// ─── Backward-compat type aliases ────────────────────────────────
|
||||||
// Handshake
|
// Handshake
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,8 @@
|
||||||
mod voice_membership;
|
|
||||||
|
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use tokio::sync::broadcast;
|
use tokio::sync::broadcast;
|
||||||
use tracing::info;
|
use tracing::info;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
async fn main() -> Result<()> {
|
async fn main() -> Result<()> {
|
||||||
tracing_subscriber::fmt()
|
tracing_subscriber::fmt()
|
||||||
|
|
@ -22,10 +18,7 @@ async fn main() -> Result<()> {
|
||||||
let cfg: vnox_gateway::domain::config::Config =
|
let cfg: vnox_gateway::domain::config::Config =
|
||||||
toml::from_str(&text).map_err(|e| anyhow::anyhow!("invalid config: {e}"))?;
|
toml::from_str(&text).map_err(|e| anyhow::anyhow!("invalid config: {e}"))?;
|
||||||
|
|
||||||
info!(
|
info!("VNOX Server starting — node: {}", cfg.node.name);
|
||||||
"VNOX Server starting — node: {}",
|
|
||||||
cfg.node.name
|
|
||||||
);
|
|
||||||
info!("Gateway TCP: {}", cfg.gateway.bind);
|
info!("Gateway TCP: {}", cfg.gateway.bind);
|
||||||
info!("Voice UDP: {}", cfg.voice.bind);
|
info!("Voice UDP: {}", cfg.voice.bind);
|
||||||
|
|
||||||
|
|
@ -59,9 +52,8 @@ async fn main() -> Result<()> {
|
||||||
vnox_voice_node::runner::run_bind(&node_name, &voice_bind).await
|
vnox_voice_node::runner::run_bind(&node_name, &voice_bind).await
|
||||||
});
|
});
|
||||||
|
|
||||||
let gate_handle = tokio::spawn(async move {
|
let gate_handle =
|
||||||
vnox_gateway::run(gate_cfg, Some(voice_member_tx)).await
|
tokio::spawn(async move { vnox_gateway::run(gate_cfg, Some(voice_member_tx)).await });
|
||||||
});
|
|
||||||
|
|
||||||
tokio::select! {
|
tokio::select! {
|
||||||
r = voice_handle => {
|
r = voice_handle => {
|
||||||
|
|
|
||||||
|
|
@ -1,22 +0,0 @@
|
||||||
use tokio::sync::broadcast;
|
|
||||||
|
|
||||||
#[derive(Clone, Debug)]
|
|
||||||
pub enum VoiceMembershipEvent {
|
|
||||||
Joined {
|
|
||||||
channel_id: String,
|
|
||||||
session_id: String,
|
|
||||||
user_id: String,
|
|
||||||
},
|
|
||||||
Left {
|
|
||||||
channel_id: String,
|
|
||||||
session_id: String,
|
|
||||||
user_id: String,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn voice_membership_channel() -> (
|
|
||||||
broadcast::Sender<VoiceMembershipEvent>,
|
|
||||||
broadcast::Receiver<VoiceMembershipEvent>,
|
|
||||||
) {
|
|
||||||
broadcast::channel(256)
|
|
||||||
}
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue