~starkingdoms/starkingdoms

ref: 66ecf5a99f256b08f04b394146eb4a362306273c starkingdoms/crates/unified/src/client/mod.rs -rw-r--r-- 1.6 KiB
66ecf5a9 — core client start 5 months ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
use std::net::{SocketAddr, UdpSocket};
use std::time::SystemTime;
use bevy::prelude::*;
use bevy_replicon::prelude::RepliconChannels;
use bevy_replicon_renet2::netcode::{ClientAuthentication, NetcodeClientTransport, NativeSocket};
use bevy_replicon_renet2::renet2::{ConnectionConfig, RenetClient};
use bevy_replicon_renet2::RenetChannelsExt;



pub struct ClientPlugin {
    pub server: SocketAddr
}
impl Plugin for ClientPlugin {
    fn build(&self, app: &mut App) {
        let server = self.server.clone();
        app
            .add_systems(Startup, move |mut commands: Commands, channels: Res<RepliconChannels>| {
                let client = RenetClient::new(
                    ConnectionConfig::from_channels(channels.server_configs(), channels.client_configs()),
                    false
                );
                let current_time = SystemTime::now().duration_since(SystemTime::UNIX_EPOCH).unwrap();
                let client_id = current_time.as_millis() as u64;
                let socket = UdpSocket::bind(SocketAddr::new("::1".parse().unwrap(), 0)).unwrap();
                let authentication = ClientAuthentication::Unsecure {
                    client_id,
                    protocol_id: 0,
                    socket_id: 0,
                    server_addr: server,
                    user_data: None
                };
                let transport = NetcodeClientTransport::new(current_time, authentication, NativeSocket::new(socket).unwrap()).unwrap();

                commands.insert_resource(client);
                commands.insert_resource(transport);

                info!(?client_id, "connected!");
            });

    }
}