Browse Source

Fix receiver capping out on 65536 bytes

new_protocol
ThePerkinrex 5 years ago
parent
commit
b4fcc1fc17
No known key found for this signature in database GPG Key ID: FD81DE6D75E20917
  1. 5
      server/src/main.rs
  2. 15
      server/src/server.rs
  3. 2
      server/src/server/game.rs
  4. 2
      server/src/server/socket_manager.rs
  5. 8
      unity/Assets/Scripts/TcpConnection.cs

5
server/src/main.rs

@ -8,11 +8,16 @@ mod command;
use log::info;
// use crate::server::decode;
#[tokio::main]
async fn main() {
server_properties::setup();
let p = server_properties::ServerProperties::load();
let (close, _stdin) = logger::setup(&p).unwrap();
// let packet = include_bytes!("a.bin");
// decode(&*packet);
// info!(target: "setup", "Starting server in `{}`", std::env::current_dir().unwrap().display());
info!(target: "setup", "Server name: `{}`", p.name);
info!(target: "setup", "Serving on address `{}`", p.addr);

15
server/src/server.rs

@ -35,6 +35,21 @@ mod protos;
mod socket_manager;
mod votes;
// pub fn decode(bytes: &[u8]) {
// let p = protos::protocol::ServerClientPacket::decode(bytes).expect("AAAAH");
// match p.data.unwrap() {
// protos::protocol::server_client_packet::Data::ReturnName(_) => log::info!("ReturnName"),
// protos::protocol::server_client_packet::Data::ReturnConnect(_) => log::info!("ReturnConnect"),
// protos::protocol::server_client_packet::Data::ReturnCreateLobby(_) => log::info!("ReturnCreateLobby"),
// protos::protocol::server_client_packet::Data::ReturnGames(_) => log::info!("ReturnGames"),
// protos::protocol::server_client_packet::Data::ReturnPublicLobbies(_) => log::info!("ReturnPublicLobbies"),
// protos::protocol::server_client_packet::Data::ReturnUsers(_) => log::info!("ReturnUsers"),
// protos::protocol::server_client_packet::Data::LobbyStatus(_) => log::info!("LobbyStatus"),
// protos::protocol::server_client_packet::Data::ReturnCardImage(_) => log::info!("ReturnCardImage"),
// protos::protocol::server_client_packet::Data::GameStatus(_) => log::info!("GameStatus"),
// }
// }
// use connection::{ConnectionServer, ConnectionService};
// use game::{GameServer, GameService};
// use lobby::{LobbyServer, LobbyService};

2
server/src/server/game.rs

@ -122,7 +122,7 @@ pub(super) async fn get_card_image(
// log::info!("Loading back image [{:?}]", time.elapsed());
let back_buf = tokio::fs::read(back).await.unwrap();
log::info!("Loaded images [{:?}]", time.elapsed());
log::info!("Loaded images {} [{:?}]", card_kind.kind, time.elapsed());
socket_mgr
.write(
data.user_id.get_ref()?,

2
server/src/server/socket_manager.rs

@ -1,4 +1,5 @@
use std::collections::HashMap;
use log::debug;
use tokio::{
io::{AsyncWriteExt, BufWriter},
net::{tcp::OwnedWriteHalf},
@ -22,6 +23,7 @@ impl MessageWriter {
panic!("Can't send a message larger than {} bytes", u32::MAX);
}
let mut data = vec![0u8; length];
debug!("Sending {} bytes", length);
protos::protocol::ServerClientPacket { data: Some(packet) }
.encode(&mut data.as_mut_slice())?;

8
unity/Assets/Scripts/TcpConnection.cs

@ -30,8 +30,12 @@ public class TcpConnection {
}
int size = BitConverter.ToInt32(b, 0);
byte[] data = new byte[size];
c.Client.Receive(data, 0, size, SocketFlags.None);
Debug.Log("Recieved " + size + " bytes");
Debug.Log("Receiving " + size + " bytes; Buffer size: " + data.Length);
int received = 0;
do {
received += c.Client.Receive(data, received, size-received, SocketFlags.None);
Debug.Log("Received " + received + " bytes");
} while(received < size); // The Receive method caps out at 65536 bytes
return Protocol.ServerClientPacket.Parser.ParseFrom(data);
}

Loading…
Cancel
Save