Browse Source
Fix receiver capping out on 65536 bytes
new_protocol
No known key found for this signature in database
GPG Key ID: FD81DE6D75E20917
5 changed files with
29 additions and
3 deletions
-
server/src/main.rs
-
server/src/server.rs
-
server/src/server/game.rs
-
server/src/server/socket_manager.rs
-
unity/Assets/Scripts/TcpConnection.cs
|
|
|
@ -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); |
|
|
|
|
|
|
|
@ -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};
|
|
|
|
|
|
|
|
@ -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()?, |
|
|
|
|
|
|
|
@ -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())?; |
|
|
|
|
|
|
|
|
|
|
|
@ -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); |
|
|
|
} |
|
|
|
|
|
|
|
|