BERCon-rs - Implementation von BERCon in Rust

07. November 2016
2
0
1
28
Ich bin grad aus Langeweile (und weil ich wieder ins ArmA-Modding einsteigen will) dabei, das BattlEye RCon-Protokoll in Rust zu implementieren. Hauptgrund ist eigentlich, dass ich BEC ziemlich kacke finde. Ziel ist es, dass ich spaeter bercon-rs in eine library umwandel und anschliessend eine Applikation drum herum schreibe, die Sachen wie eine whitelist einfach ermoeglicht. Das ganze wird dann auch ein Web-Frontend haben, damit sowas auch leicht administrierbar ist.

SourceCode: GitHub - Rukenshia/bercon-rs: rust tool implementing BERcon

Bisher kann man sich schon einloggen und Befehle senden / empfangen:
Code:
    crossbeam::scope(|scope| {
        {
            let client = client.clone();
            scope.spawn(move || { client.start("bla", tx).unwrap(); });
        }
        scope.spawn(move || {
            loop {
                match rx.recv().unwrap() {
                    RemotePacket::Login(success) => {
                        if success {
                            println!("successfully logged in.");
                            client.send(BECommand::Players).unwrap();
                        }
                    },
                    RemotePacket::Command(ref seq, ref data) => println!("received command response (seq# {}): {}", seq, data),
                    RemotePacket::Log(_, ref data) => println!("[LOG] {}", data),
                    _ => println!("PACKET RECEIVED")
                };
            }
        })
    });

erzeugt folgenden output:
S:\arma\bercon>cargo run
Compiling bercon v0.1.0 (file:///S:/arma/bercon)
Finished debug [unoptimized + debuginfo] target(s) in 1.91 secs
Running `target\debug\bercon.exe`
successfully logged in.
received command response (seq# 0): Players on server:
[#] [IP Address]:[Port] [Ping] [GUID] [Name]
--------------------------------------------------
(0 players in total)
[LOG] RCon admin #0 (127.0.0.1:23308) logged in