fix(stereo): DISCOVERY_MAGIC
This commit is contained in:
@@ -5,6 +5,7 @@ use std::time::Duration;
|
|||||||
use tokio::net::UdpSocket;
|
use tokio::net::UdpSocket;
|
||||||
|
|
||||||
pub const DISCOVERY_PORT: u16 = 53530;
|
pub const DISCOVERY_PORT: u16 = 53530;
|
||||||
|
const DISCOVERY_MAGIC: &[u8] = b"STEREO_DISCOVERY_V1";
|
||||||
|
|
||||||
/// 服务发现模块,用于主从节点的自动发现
|
/// 服务发现模块,用于主从节点的自动发现
|
||||||
pub struct Discovery;
|
pub struct Discovery;
|
||||||
@@ -16,7 +17,9 @@ impl Discovery {
|
|||||||
socket.set_broadcast(true)?;
|
socket.set_broadcast(true)?;
|
||||||
|
|
||||||
let target: SocketAddr = format!("255.255.255.255:{}", DISCOVERY_PORT).parse()?;
|
let target: SocketAddr = format!("255.255.255.255:{}", DISCOVERY_PORT).parse()?;
|
||||||
let msg = postcard::to_allocvec(&ControlPacket::ServerHello { udp_port: tcp_port })?;
|
|
||||||
|
let mut msg = DISCOVERY_MAGIC.to_vec();
|
||||||
|
msg.extend(postcard::to_allocvec(&ControlPacket::ServerHello { udp_port: tcp_port })?);
|
||||||
|
|
||||||
tokio::spawn(async move {
|
tokio::spawn(async move {
|
||||||
loop {
|
loop {
|
||||||
@@ -35,10 +38,12 @@ impl Discovery {
|
|||||||
|
|
||||||
loop {
|
loop {
|
||||||
let (len, addr) = socket.recv_from(&mut buf).await?;
|
let (len, addr) = socket.recv_from(&mut buf).await?;
|
||||||
if let Ok(ControlPacket::ServerHello { udp_port }) =
|
let data = &buf[..len];
|
||||||
postcard::from_bytes::<ControlPacket>(&buf[..len])
|
if data.starts_with(DISCOVERY_MAGIC) {
|
||||||
{
|
let packet_data = &data[DISCOVERY_MAGIC.len()..];
|
||||||
return Ok((addr.ip(), udp_port));
|
if let Ok(ControlPacket::ServerHello { udp_port }) = postcard::from_bytes(packet_data) {
|
||||||
|
return Ok((addr.ip(), udp_port));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user