2 Commits

6 changed files with 483 additions and 375 deletions
Split View
  1. +447
    -325
      Cargo.lock
  2. +3
    -0
      Cargo.toml
  3. +5
    -5
      client/Cargo.toml
  4. +25
    -42
      client/src/client.rs
  5. +1
    -1
      proto/Cargo.toml
  6. +2
    -2
      server/Cargo.toml

+ 447
- 325
Cargo.lock
File diff suppressed because it is too large
View File


+ 3
- 0
Cargo.toml View File

@ -1,5 +1,8 @@
[workspace]
edition = "2021"
resolver = "2"
members = [
"client",
"proto",


+ 5
- 5
client/Cargo.toml View File

@ -8,17 +8,17 @@ edition = "2021"
anyhow = "^1.0"
clap = "^2.33"
crossbeam-channel = "^0.5"
env_logger = "^0.8"
env_logger = "^0.11"
futures = "^0.3"
log = "^0.4"
serde = { version = "^1.0", features = ["derive"] }
serde_json = "^1.0"
slab = "^0.2"
slab = "^0.4"
solstice-proto = { path = "../proto" }
thiserror = "^1.0"
tokio = { version = "1.0", features = ["full"] }
tokio-tungstenite = "0.15"
toml = "^0.5"
tokio-tungstenite = "0.23"
toml = "^0.8"
[dev-dependencies]
parking_lot = "^0.11.0"
parking_lot = "^0.12"

+ 25
- 42
client/src/client.rs View File

@ -52,7 +52,7 @@ pub struct Client {
rooms: RoomMap,
users: UserMap,
peers: slab::Slab<Peer, usize>,
peers: slab::Slab<Peer>,
}
impl Client {
@ -77,7 +77,7 @@ impl Client {
rooms: RoomMap::new(),
users: UserMap::new(),
peers: slab::Slab::new(max_peers),
peers: slab::Slab::with_capacity(max_peers),
}
}
@ -264,20 +264,15 @@ impl Client {
*=========================*/
#[allow(dead_code)]
fn handle_peer_connection_closed(&mut self, peer_id: usize) {
let mut occupied_entry = match self.peers.entry(peer_id) {
None | Some(slab::Entry::Vacant(_)) => {
error!("Unknown peer connection {} has closed", peer_id);
return;
}
Some(slab::Entry::Occupied(occupied_entry)) => occupied_entry,
fn handle_peer_connection_closed(&mut self, mut peer_id: usize) {
let Some(mut peer) = self.peers.try_remove(peer_id) else {
error!("Unknown peer connection {} has closed", peer_id);
return;
};
match occupied_entry.get_mut().state {
match peer.state {
PeerState::Open => {
info!("Peer connection {} has closed", peer_id);
occupied_entry.remove();
}
PeerState::WaitingFirewalled => {
@ -285,7 +280,6 @@ impl Client {
"Peer connection {} has closed, was waiting: inconsistent",
peer_id
);
occupied_entry.remove();
}
PeerState::Opening => {
@ -294,8 +288,10 @@ impl Client {
peer_id
);
let peer = occupied_entry.get_mut();
peer.state = PeerState::WaitingFirewalled;
peer_id = self.peers.insert(peer);
let peer = self.peers.get(peer_id).unwrap();
#[allow(deprecated)]
self
@ -317,7 +313,6 @@ impl Client {
peer_id
);
let (peer, _) = occupied_entry.remove();
#[allow(deprecated)]
self
.proto_tx
@ -461,40 +456,28 @@ impl Client {
&mut self,
response: server::ConnectToPeerResponse,
) {
let peer = Peer {
if self.peers.len() == self.config.max_peers {
warn!(
"Cannot open peer connection ({}:{}): too many already open",
response.ip,
response.port,
);
return;
}
let peer_id = self.peers.insert(Peer {
user_name: response.user_name,
ip: response.ip,
port: response.port,
connection_type: response.connection_type,
token: response.token,
state: PeerState::OpeningFirewalled,
};
match self.peers.insert(peer) {
Ok(peer_id) => {
info!(
"Opening peer connection {} to {}:{} to pierce firewall",
peer_id, response.ip, response.port
);
/*
self
.proto_tx
.send(solstice_proto::Request::PeerConnect(
peer_id,
response.ip,
response.port,
))
.unwrap();
*/
}
});
Err(peer) => {
warn!(
"Cannot open peer connection {:?}: too many already open",
peer
);
}
}
info!(
"Opening peer connection {} to {}:{} to pierce firewall",
peer_id, response.ip, response.port
);
}
fn handle_login_response(&mut self, login: server::LoginResponse) {


+ 1
- 1
proto/Cargo.toml View File

@ -14,5 +14,5 @@ thiserror = "^1.0"
tokio = { version = "^1.0", features = ["full"] }
[dev-dependencies]
env_logger = "^0.9"
env_logger = "^0.11"
serde_json = "^1.0"

+ 2
- 2
server/Cargo.toml View File

@ -6,8 +6,8 @@ edition = "2021"
[dependencies]
anyhow = "^1.0"
env_logger = "^0.8"
env_logger = "^0.11"
log = "^0.4"
parking_lot = "^0.11"
parking_lot = "^0.12"
solstice-proto = { path = "../proto" }
tokio = { version = "^1.0", features = ["full"] }

Loading…
Cancel
Save