make clientid a stronger type
This commit is contained in:
parent
e9a24e515d
commit
709d0bae81
@ -61,7 +61,7 @@ pub struct ClientPool<S, R>{
|
|||||||
client_ids: HashMap<Token, ClientId>,
|
client_ids: HashMap<Token, ClientId>,
|
||||||
clients: HashMap<ClientId, Client<S, R>>,
|
clients: HashMap<ClientId, Client<S, R>>,
|
||||||
listener: TcpListener,
|
listener: TcpListener,
|
||||||
client_id_incr: ClientId,
|
client_id_incr: usize,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -90,13 +90,13 @@ impl<S, R> ClientPool<S, R> where
|
|||||||
fn new_client(&mut self) {
|
fn new_client(&mut self) {
|
||||||
let (socket, _addr) = self.listener.accept().unwrap();
|
let (socket, _addr) = self.listener.accept().unwrap();
|
||||||
|
|
||||||
let client_id = self.client_id_incr;
|
let client_id = ClientId(self.client_id_incr);
|
||||||
self.client_id_incr += 1;
|
self.client_id_incr += 1;
|
||||||
|
|
||||||
self.poll.register(&socket, Token(client_id), Ready::readable() | Ready::writable(), PollOpt::edge()).unwrap();
|
self.poll.register(&socket, Token(client_id.0), Ready::readable() | Ready::writable(), PollOpt::edge()).unwrap();
|
||||||
let client = Client::new(client_id, socket);
|
let client = Client::new(client_id, socket);
|
||||||
|
|
||||||
self.client_ids.insert(Token(client_id), client_id);
|
self.client_ids.insert(Token(client_id.0), client_id);
|
||||||
self.clients.insert(client_id, client);
|
self.clients.insert(client_id, client);
|
||||||
self.sender.send(ClientPoolAction::NewClient(client_id)).unwrap();
|
self.sender.send(ClientPoolAction::NewClient(client_id)).unwrap();
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
use libpso::PacketParseError;
|
use libpso::PacketParseError;
|
||||||
use libpso::crypto::PSOCipher;
|
use libpso::crypto::PSOCipher;
|
||||||
|
|
||||||
pub type ClientId = usize;
|
#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
|
||||||
|
pub struct ClientId(pub usize);
|
||||||
|
|
||||||
pub enum OnConnect<S: SendServerPacket> {
|
pub enum OnConnect<S: SendServerPacket> {
|
||||||
Packet(S),
|
Packet(S),
|
||||||
|
@ -339,10 +339,10 @@ mod test {
|
|||||||
created_at: SystemTime::now(),
|
created_at: SystemTime::now(),
|
||||||
});
|
});
|
||||||
|
|
||||||
let send = server.handle(5, &RecvCharacterPacket::RequestSettings(RequestSettings {flag: 0})).collect::<Vec<_>>();
|
let send = server.handle(ClientId(5), &RecvCharacterPacket::RequestSettings(RequestSettings {flag: 0})).collect::<Vec<_>>();
|
||||||
assert!(send.len() == 1);
|
assert!(send.len() == 1);
|
||||||
|
|
||||||
assert!(send[0].0 == 5);
|
assert!(send[0].0 == ClientId(5));
|
||||||
let bytes = send[0].1.as_bytes();
|
let bytes = send[0].1.as_bytes();
|
||||||
assert!(bytes[2] == 0xE2);
|
assert!(bytes[2] == 0xE2);
|
||||||
assert!(bytes.len() == 0xAFC);
|
assert!(bytes.len() == 0xAFC);
|
||||||
@ -353,9 +353,9 @@ mod test {
|
|||||||
struct TestData;
|
struct TestData;
|
||||||
impl DataAccess for TestData {}
|
impl DataAccess for TestData {}
|
||||||
let mut server = CharacterServerState::new(TestData {});
|
let mut server = CharacterServerState::new(TestData {});
|
||||||
let send = server.handle(1, &RecvCharacterPacket::Checksum(Checksum {flag: 0,
|
let send = server.handle(ClientId(1), &RecvCharacterPacket::Checksum(Checksum {flag: 0,
|
||||||
checksum: 1234,
|
checksum: 1234,
|
||||||
padding: 0,
|
padding: 0,
|
||||||
})).collect::<Vec<_>>();
|
})).collect::<Vec<_>>();
|
||||||
assert!(send.len() == 1);
|
assert!(send.len() == 1);
|
||||||
|
|
||||||
|
@ -174,7 +174,7 @@ mod test {
|
|||||||
|
|
||||||
let mut server = LoginServerState::new(TestData {});
|
let mut server = LoginServerState::new(TestData {});
|
||||||
|
|
||||||
let send = server.handle(1, &RecvLoginPacket::Login(Login {
|
let send = server.handle(ClientId(1), &RecvLoginPacket::Login(Login {
|
||||||
flag: 0,
|
flag: 0,
|
||||||
tag: 65536,
|
tag: 65536,
|
||||||
guildcard: 0,
|
guildcard: 0,
|
||||||
@ -194,7 +194,7 @@ mod test {
|
|||||||
|
|
||||||
})).collect::<Vec<_>>();
|
})).collect::<Vec<_>>();
|
||||||
assert!(send == vec![
|
assert!(send == vec![
|
||||||
(1, SendLoginPacket::LoginResponse(LoginResponse {
|
(ClientId(1), SendLoginPacket::LoginResponse(LoginResponse {
|
||||||
flag: 0,
|
flag: 0,
|
||||||
status: AccountStatus::Ok,
|
status: AccountStatus::Ok,
|
||||||
tag: 65536,
|
tag: 65536,
|
||||||
@ -204,7 +204,7 @@ mod test {
|
|||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
caps: 258
|
caps: 258
|
||||||
})),
|
})),
|
||||||
(1, SendLoginPacket::RedirectClient(RedirectClient {
|
(ClientId(1), SendLoginPacket::RedirectClient(RedirectClient {
|
||||||
flag: 0,
|
flag: 0,
|
||||||
ip: 16777343,
|
ip: 16777343,
|
||||||
port: 12001,
|
port: 12001,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user