diff --git a/src/common/client.rs b/src/common/client.rs index a813586..51c2874 100644 --- a/src/common/client.rs +++ b/src/common/client.rs @@ -1,7 +1,7 @@ use libpso::crypto::{PSOCipher, NullCipher}; use libpso::{PSOPacket, PacketParseError}; -use crate::common::serverstate::{ServerState, ServerPacket, OnConnect}; +use crate::common::serverstate::{ServerState, SendServerPacket, RecvServerPacket, OnConnect}; use crate::common::network::{recv_packet, PacketNetworkError}; use std::net; @@ -9,17 +9,24 @@ use std::io::Write; use mio::tcp::TcpStream; use mio::{Poll, Events, Token, Ready, PollOpt}; -pub struct Client
{
+pub struct Client {
- pub fn new(socket: mio::tcp::TcpStream, state: Box {
+impl {
for task in client.state.on_connect() {
match task {
- OnConnect::Packet(pkt) => client.send(&*pkt),
+ OnConnect::Packet(pkt) => client.send(pkt),
OnConnect::Cipher((cipher_in, cipher_out)) => {
client.cipher_in = cipher_in;
client.cipher_out = cipher_out;
@@ -60,7 +67,7 @@ impl {
}
// TODO: this may need to pad to 8 bytes for bb cipher
- fn send(&mut self, pkt: &dyn PSOPacket) {
+ fn send(&mut self, pkt: S) {
println!("[send] {:?}", pkt);
let buf = pkt.as_bytes();
let mut cbuf = self.cipher_out.encrypt(&buf).unwrap();
@@ -85,7 +92,7 @@ impl {
loop {
let pkt = recv_packet(&mut self.socket, &mut *self.cipher_in)
.and_then(|pkt| {
- P::from_bytes(&pkt)
+ R::from_bytes(&pkt)
.map_err(|err| err.into())
});
@@ -94,7 +101,7 @@ impl {
println!("[recv] {:?}", pkt);
let response = self.state.handle(&pkt);
for r in response {
- self.send(&*r);
+ self.send(r);
}
},
Err(err) => {
diff --git a/src/common/serverstate.rs b/src/common/serverstate.rs
index f93c295..2b02b3b 100644
--- a/src/common/serverstate.rs
+++ b/src/common/serverstate.rs
@@ -1,21 +1,26 @@
-use libpso::{PSOPacket, PacketParseError};
+use libpso::PacketParseError;
use libpso::crypto::PSOCipher;
-pub enum OnConnect {
- Packet(Box {
running: bool,
socket: mio::tcp::TcpStream,
cipher_in: Box Client where
+ S: SendServerPacket + std::fmt::Debug,
+ R: RecvServerPacket + std::fmt::Debug,
+ E: std::fmt::Debug,
+{
+ pub fn new(socket: mio::tcp::TcpStream,
+ state: Box
+ {
let mut client = Client {
running: true,
socket: socket,
@@ -31,7 +38,7 @@ impl