|
|
@@ -89,12 +89,7 @@ enum LoopFailure {
|
|
89
|
89
|
|
|
90
|
90
|
impl RendezvousServer {
|
|
91
|
91
|
#[tokio::main(flavor = "multi_thread")]
|
|
92
|
|
- pub async fn start(
|
|
93
|
|
- port: i32,
|
|
94
|
|
- serial: i32,
|
|
95
|
|
- key: &str,
|
|
96
|
|
- rmem: usize,
|
|
97
|
|
- ) -> ResultType<()> {
|
|
|
92
|
+ pub async fn start(port: i32, serial: i32, key: &str, rmem: usize) -> ResultType<()> {
|
|
98
|
93
|
let (key, sk) = Self::get_server_sk(key);
|
|
99
|
94
|
let addr = format!("0.0.0.0:{}", port);
|
|
100
|
95
|
let addr2 = format!("0.0.0.0:{}", port - 1);
|
|
|
@@ -762,27 +757,26 @@ impl RendezvousServer {
|
|
762
|
757
|
stream: &mut FramedStream,
|
|
763
|
758
|
peers: Vec<String>,
|
|
764
|
759
|
) -> ResultType<()> {
|
|
765
|
|
- let mut onlines = Vec::new();
|
|
766
|
|
- for peer_id in &peers {
|
|
|
760
|
+ let mut states = BytesMut::zeroed((peers.len() + 7) / 8);
|
|
|
761
|
+ for i in 0..peers.len() {
|
|
|
762
|
+ let peer_id = &peers[i];
|
|
|
763
|
+ // bytes index from left to right
|
|
|
764
|
+ let states_idx = i / 8;
|
|
|
765
|
+ let bit_idx = 7 - i % 8;
|
|
767
|
766
|
if let Some(peer) = self.pm.get_in_memory(&peer_id).await {
|
|
768
|
767
|
let (elapsed, _) = {
|
|
769
|
768
|
let r = peer.read().await;
|
|
770
|
769
|
(r.last_reg_time.elapsed().as_millis() as i32, r.socket_addr)
|
|
771
|
770
|
};
|
|
772
|
771
|
if elapsed < REG_TIMEOUT {
|
|
773
|
|
- onlines.push(peer_id.clone());
|
|
|
772
|
+ states[states_idx] |= 0x01 << bit_idx;
|
|
774
|
773
|
}
|
|
775
|
774
|
}
|
|
776
|
775
|
}
|
|
777
|
|
- let offlines = peers
|
|
778
|
|
- .into_iter()
|
|
779
|
|
- .filter(|p| onlines.iter().position(|r| r == p).is_none())
|
|
780
|
|
- .collect::<Vec<_>>();
|
|
781
|
776
|
|
|
782
|
777
|
let mut msg_out = RendezvousMessage::new();
|
|
783
|
778
|
msg_out.set_online_response(OnlineResponse {
|
|
784
|
|
- onlines,
|
|
785
|
|
- offlines,
|
|
|
779
|
+ states: states.into(),
|
|
786
|
780
|
..Default::default()
|
|
787
|
781
|
});
|
|
788
|
782
|
stream.send(&msg_out).await?;
|
|
|
@@ -1079,29 +1073,19 @@ impl RendezvousServer {
|
|
1079
|
1073
|
Some(rendezvous_message::Union::OnlineRequest(or)) => {
|
|
1080
|
1074
|
allow_err!(rs.handle_online_request(&mut stream, or.peers).await);
|
|
1081
|
1075
|
}
|
|
1082
|
|
- _ => {
|
|
1083
|
|
- }
|
|
|
1076
|
+ _ => {}
|
|
1084
|
1077
|
}
|
|
1085
|
1078
|
}
|
|
1086
|
1079
|
}
|
|
1087
|
1080
|
});
|
|
1088
|
1081
|
}
|
|
1089
|
1082
|
|
|
1090
|
|
- async fn handle_listener(
|
|
1091
|
|
- &self,
|
|
1092
|
|
- stream: TcpStream,
|
|
1093
|
|
- addr: SocketAddr,
|
|
1094
|
|
- key: &str,
|
|
1095
|
|
- ws: bool,
|
|
1096
|
|
- ) {
|
|
|
1083
|
+ async fn handle_listener(&self, stream: TcpStream, addr: SocketAddr, key: &str, ws: bool) {
|
|
1097
|
1084
|
log::debug!("Tcp connection from {:?}, ws: {}", addr, ws);
|
|
1098
|
1085
|
let mut rs = self.clone();
|
|
1099
|
1086
|
let key = key.to_owned();
|
|
1100
|
1087
|
tokio::spawn(async move {
|
|
1101
|
|
- allow_err!(
|
|
1102
|
|
- rs.handle_listener_inner(stream, addr, &key, ws)
|
|
1103
|
|
- .await
|
|
1104
|
|
- );
|
|
|
1088
|
+ allow_err!(rs.handle_listener_inner(stream, addr, &key, ws).await);
|
|
1105
|
1089
|
});
|
|
1106
|
1090
|
}
|
|
1107
|
1091
|
|
|
|
@@ -1121,10 +1105,7 @@ impl RendezvousServer {
|
|
1121
|
1105
|
while let Ok(Some(Ok(msg))) = timeout(30_000, b.next()).await {
|
|
1122
|
1106
|
match msg {
|
|
1123
|
1107
|
tungstenite::Message::Binary(bytes) => {
|
|
1124
|
|
- if !self
|
|
1125
|
|
- .handle_tcp(&bytes, &mut sink, addr, key, ws)
|
|
1126
|
|
- .await
|
|
1127
|
|
- {
|
|
|
1108
|
+ if !self.handle_tcp(&bytes, &mut sink, addr, key, ws).await {
|
|
1128
|
1109
|
break;
|
|
1129
|
1110
|
}
|
|
1130
|
1111
|
}
|
|
|
@@ -1135,10 +1116,7 @@ impl RendezvousServer {
|
|
1135
|
1116
|
let (a, mut b) = Framed::new(stream, BytesCodec::new()).split();
|
|
1136
|
1117
|
sink = Some(Sink::TcpStream(a));
|
|
1137
|
1118
|
while let Ok(Some(Ok(bytes))) = timeout(30_000, b.next()).await {
|
|
1138
|
|
- if !self
|
|
1139
|
|
- .handle_tcp(&bytes, &mut sink, addr, key, ws)
|
|
1140
|
|
- .await
|
|
1141
|
|
- {
|
|
|
1119
|
+ if !self.handle_tcp(&bytes, &mut sink, addr, key, ws).await {
|
|
1142
|
1120
|
break;
|
|
1143
|
1121
|
}
|
|
1144
|
1122
|
}
|