better multicast
This commit is contained in:
parent
bb6241ac97
commit
6feb6f8ab8
3 changed files with 8 additions and 9 deletions
|
@ -26,7 +26,7 @@ impl App {
|
||||||
KeyCode::Char('l') => self.logs(),
|
KeyCode::Char('l') => self.logs(),
|
||||||
KeyCode::Char('m') => self.main(),
|
KeyCode::Char('m') => self.main(),
|
||||||
KeyCode::Char('h') | KeyCode::Char('?') => self.help(),
|
KeyCode::Char('h') | KeyCode::Char('?') => self.help(),
|
||||||
KeyCode::Char('c') => self.service.refresh_peers().await,
|
KeyCode::Char('c') => self.service.clear_peers().await,
|
||||||
KeyCode::Esc => self.pop(),
|
KeyCode::Esc => self.pop(),
|
||||||
_ => match mode {
|
_ => match mode {
|
||||||
CurrentScreen::Main | CurrentScreen::Help => {}
|
CurrentScreen::Main | CurrentScreen::Help => {}
|
||||||
|
|
11
src/lib.rs
11
src/lib.rs
|
@ -30,8 +30,6 @@ use transfer::Session;
|
||||||
|
|
||||||
pub const DEFAULT_PORT: u16 = 53317;
|
pub const DEFAULT_PORT: u16 = 53317;
|
||||||
pub const MULTICAST_IP: Ipv4Addr = Ipv4Addr::new(224, 0, 0, 167);
|
pub const MULTICAST_IP: Ipv4Addr = Ipv4Addr::new(224, 0, 0, 167);
|
||||||
pub const LISTENING_SOCKET_ADDR: SocketAddrV4 =
|
|
||||||
SocketAddrV4::new(Ipv4Addr::from_bits(0), DEFAULT_PORT);
|
|
||||||
pub const DEFAULT_INTERVAL: Duration = Duration::from_micros(33333);
|
pub const DEFAULT_INTERVAL: Duration = Duration::from_micros(33333);
|
||||||
|
|
||||||
pub type Peers = Arc<Mutex<BTreeMap<String, (SocketAddr, Device)>>>;
|
pub type Peers = Arc<Mutex<BTreeMap<String, (SocketAddr, Device)>>>;
|
||||||
|
@ -78,7 +76,7 @@ pub struct ReceiveRequest {
|
||||||
|
|
||||||
impl PartialEq for ReceiveRequest {
|
impl PartialEq for ReceiveRequest {
|
||||||
fn eq(&self, other: &Self) -> bool {
|
fn eq(&self, other: &Self) -> bool {
|
||||||
self.alias == other.alias
|
self.alias == other.alias && self.files == other.files
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -113,10 +111,11 @@ impl JocalService {
|
||||||
config: Config,
|
config: Config,
|
||||||
) -> crate::error::Result<(Self, UnboundedReceiver<JocalEvent>)> {
|
) -> crate::error::Result<(Self, UnboundedReceiver<JocalEvent>)> {
|
||||||
let (tx, rx) = mpsc::unbounded_channel();
|
let (tx, rx) = mpsc::unbounded_channel();
|
||||||
let socket = UdpSocket::bind(LISTENING_SOCKET_ADDR).await?;
|
let addr = SocketAddrV4::new(config.local_ip_addr, DEFAULT_PORT);
|
||||||
|
let socket = UdpSocket::bind(addr).await?;
|
||||||
socket.set_multicast_loop_v4(false)?;
|
socket.set_multicast_loop_v4(false)?;
|
||||||
socket.set_multicast_ttl_v4(1)?; // local subnet only
|
socket.set_multicast_ttl_v4(1)?; // local subnet only
|
||||||
socket.join_multicast_v4(MULTICAST_IP, Ipv4Addr::from_bits(0))?;
|
socket.join_multicast_v4(MULTICAST_IP, config.local_ip_addr)?;
|
||||||
|
|
||||||
let client = reqwest::ClientBuilder::new()
|
let client = reqwest::ClientBuilder::new()
|
||||||
// localsend certs are self-signed
|
// localsend certs are self-signed
|
||||||
|
@ -202,7 +201,7 @@ impl JocalService {
|
||||||
.graceful_shutdown(Some(Duration::from_secs(5)));
|
.graceful_shutdown(Some(Duration::from_secs(5)));
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn refresh_peers(&self) {
|
pub async fn clear_peers(&self) {
|
||||||
let mut peers = self.peers.lock().await;
|
let mut peers = self.peers.lock().await;
|
||||||
peers.clear();
|
peers.clear();
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,7 +6,7 @@ use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
use crate::error::LocalSendError;
|
use crate::error::LocalSendError;
|
||||||
|
|
||||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
|
||||||
#[serde(rename_all = "camelCase")]
|
#[serde(rename_all = "camelCase")]
|
||||||
pub struct FileMetadata {
|
pub struct FileMetadata {
|
||||||
pub id: String,
|
pub id: String,
|
||||||
|
@ -21,7 +21,7 @@ pub struct FileMetadata {
|
||||||
pub metadata: Option<FileMetadataExt>,
|
pub metadata: Option<FileMetadataExt>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
|
||||||
pub struct FileMetadataExt {
|
pub struct FileMetadataExt {
|
||||||
#[serde(skip_serializing_if = "Option::is_none")]
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
pub modified: Option<String>,
|
pub modified: Option<String>,
|
||||||
|
|
Loading…
Reference in a new issue