mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
better lz4
This commit is contained in:
parent
4cefdcefea
commit
8fb445b0e8
@ -36,13 +36,16 @@ pub(crate) struct IncomingMessage {
|
||||
pub(crate) fn serialize<M: Serialize>(message: &M) -> MessageBuffer {
|
||||
//this will never fail: https://docs.rs/bincode/0.8.0/bincode/fn.serialize.html
|
||||
let writer = bincode::serialize(message).unwrap();
|
||||
MessageBuffer { data: writer }
|
||||
MessageBuffer {
|
||||
data: lz4_compress::compress(&writer),
|
||||
}
|
||||
}
|
||||
|
||||
//pub(crate) fn deserialize<M: DeserializeOwned>(buffer: MessageBuffer) ->
|
||||
// std::Result<M, std::Box<bincode::error::bincode::ErrorKind>> {
|
||||
pub(crate) fn deserialize<M: DeserializeOwned>(buffer: MessageBuffer) -> bincode::Result<M> {
|
||||
let span = buffer.data;
|
||||
let span = lz4_compress::decompress(&buffer.data)
|
||||
.expect("lz4_compression error, failed to deserialze");
|
||||
//this might fail if you choose the wrong type for M. in that case probably X
|
||||
// got transfered while you assume Y. probably this means your application
|
||||
// logic is wrong. E.g. You expect a String, but just get a u8.
|
||||
@ -134,13 +137,11 @@ mod tests {
|
||||
fn serialize_test() {
|
||||
let msg = "abc";
|
||||
let mb = serialize(&msg);
|
||||
assert_eq!(mb.data.len(), 11);
|
||||
assert_eq!(mb.data[0], 3);
|
||||
assert_eq!(mb.data[1], 0);
|
||||
assert_eq!(mb.data[7], 0);
|
||||
assert_eq!(mb.data[8], b'a');
|
||||
assert_eq!(mb.data[8], 97);
|
||||
assert_eq!(mb.data[9], b'b');
|
||||
assert_eq!(mb.data[10], b'c');
|
||||
assert_eq!(mb.data.len(), 9);
|
||||
assert_eq!(mb.data[0], 34);
|
||||
assert_eq!(mb.data[1], 3);
|
||||
assert_eq!(mb.data[6], b'a');
|
||||
assert_eq!(mb.data[7], b'b');
|
||||
assert_eq!(mb.data[8], b'c');
|
||||
}
|
||||
}
|
||||
|
@ -182,10 +182,9 @@ impl TcpProtocol {
|
||||
bytes[15],
|
||||
]);
|
||||
let length = u16::from_le_bytes([bytes[16], bytes[17]]);
|
||||
let mut cdata = vec![0; length as usize];
|
||||
let mut data = vec![0; length as usize];
|
||||
throughput_cache.inc_by(length as i64);
|
||||
Self::read_except_or_close(cid, &stream, &mut cdata, w2c_cid_frame_s).await;
|
||||
let data = lz4_compress::decompress(&cdata).unwrap();
|
||||
Self::read_except_or_close(cid, &stream, &mut data, w2c_cid_frame_s).await;
|
||||
Frame::Data { mid, start, data }
|
||||
},
|
||||
FRAME_RAW => {
|
||||
@ -348,7 +347,6 @@ impl TcpProtocol {
|
||||
},
|
||||
Frame::Data { mid, start, data } => {
|
||||
throughput_cache.inc_by(data.len() as i64);
|
||||
let cdata = lz4_compress::compress(&data);
|
||||
Self::write_or_close(&mut stream, &FRAME_DATA.to_be_bytes(), &mut c2w_frame_r)
|
||||
.await
|
||||
|| Self::write_or_close(&mut stream, &mid.to_le_bytes(), &mut c2w_frame_r)
|
||||
@ -357,11 +355,11 @@ impl TcpProtocol {
|
||||
.await
|
||||
|| Self::write_or_close(
|
||||
&mut stream,
|
||||
&(cdata.len() as u16).to_le_bytes(),
|
||||
&(data.len() as u16).to_le_bytes(),
|
||||
&mut c2w_frame_r,
|
||||
)
|
||||
.await
|
||||
|| Self::write_or_close(&mut stream, &cdata, &mut c2w_frame_r).await
|
||||
|| Self::write_or_close(&mut stream, &data, &mut c2w_frame_r).await
|
||||
},
|
||||
Frame::Raw(data) => {
|
||||
Self::write_or_close(&mut stream, &FRAME_RAW.to_be_bytes(), &mut c2w_frame_r)
|
||||
|
@ -34,7 +34,7 @@ pub const PROMISES_COMPRESSED: Promises = 8;
|
||||
pub const PROMISES_ENCRYPTED: Promises = 16;
|
||||
|
||||
pub(crate) const VELOREN_MAGIC_NUMBER: [u8; 7] = [86, 69, 76, 79, 82, 69, 78]; //VELOREN
|
||||
pub const VELOREN_NETWORK_VERSION: [u32; 3] = [0, 3, 0];
|
||||
pub const VELOREN_NETWORK_VERSION: [u32; 3] = [0, 4, 0];
|
||||
pub(crate) const STREAM_ID_OFFSET1: Sid = Sid::new(0);
|
||||
pub(crate) const STREAM_ID_OFFSET2: Sid = Sid::new(u64::MAX / 2);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user