mirror of
https://mirror.suhoan.cn/https://github.com/EasyTier/EasyTier.git
synced 2025-12-12 04:37:23 +08:00
cli: sort peers by IPv4 and hostname (#1191)
* cli: sort entries by IPv4 and hostname Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
This commit is contained in:
@@ -342,7 +342,7 @@ impl PunchSymToConeHoleClient {
|
||||
async fn get_rpc_stub(
|
||||
&self,
|
||||
dst_peer_id: PeerId,
|
||||
) -> Box<(dyn UdpHolePunchRpc<Controller = BaseController> + std::marker::Send + 'static)> {
|
||||
) -> Box<dyn UdpHolePunchRpc<Controller = BaseController> + std::marker::Send + 'static> {
|
||||
self.peer_mgr
|
||||
.get_peer_rpc_mgr()
|
||||
.rpc_client()
|
||||
|
||||
@@ -545,6 +545,18 @@ impl CommandHandler<'_> {
|
||||
items.push(p.into());
|
||||
}
|
||||
|
||||
// Sort items by ipv4 (using IpAddr for proper numeric comparison) first, then by hostname
|
||||
items.sort_by(|a, b| {
|
||||
use std::net::{IpAddr, Ipv4Addr};
|
||||
use std::str::FromStr;
|
||||
let a_ip = IpAddr::from_str(&a.ipv4).unwrap_or(IpAddr::V4(Ipv4Addr::UNSPECIFIED));
|
||||
let b_ip = IpAddr::from_str(&b.ipv4).unwrap_or(IpAddr::V4(Ipv4Addr::UNSPECIFIED));
|
||||
match a_ip.cmp(&b_ip) {
|
||||
std::cmp::Ordering::Equal => a.hostname.cmp(&b.hostname),
|
||||
other => other,
|
||||
}
|
||||
});
|
||||
|
||||
print_output(&items, self.output_format)?;
|
||||
|
||||
Ok(())
|
||||
|
||||
@@ -96,13 +96,13 @@ impl PeerCenterBase {
|
||||
>(
|
||||
&self,
|
||||
job_ctx: T,
|
||||
job_fn: (impl Fn(
|
||||
job_fn: impl Fn(
|
||||
Box<dyn PeerCenterRpc<Controller = BaseController> + Send>,
|
||||
Arc<PeridicJobCtx<T>>,
|
||||
) -> Fut
|
||||
+ Send
|
||||
+ Sync
|
||||
+ 'static),
|
||||
+ 'static,
|
||||
) -> () {
|
||||
let my_peer_id = self.my_peer_id;
|
||||
let peer_mgr = self.peer_mgr.clone();
|
||||
|
||||
Reference in New Issue
Block a user