feat(lib): report each finished upload's rate to the server
The speed other users see for us in `user` lookups and in the server's own ranking comes from SendUploadSpeed (code 121), which the client never sent, so it read zero however much we served. Each completed upload now reports its measured bytes per second, as Nicotine+ and slskd do.
This commit is contained in:
@@ -143,6 +143,16 @@ impl MessageFactory {
|
||||
Message::new().write_int32(7).write_string(username).clone()
|
||||
}
|
||||
|
||||
/// Tell the server (code 121) what a finished upload averaged, in bytes
|
||||
/// per second; it folds that into the speed other users see for us.
|
||||
#[must_use]
|
||||
pub fn build_send_upload_speed(bytes_per_second: u32) -> Message {
|
||||
Message::new()
|
||||
.write_int32(121)
|
||||
.write_int32(bytes_per_second)
|
||||
.clone()
|
||||
}
|
||||
|
||||
/// Ask the server (code 36) for a user's share statistics.
|
||||
#[must_use]
|
||||
pub fn build_get_user_stats(username: &str) -> Message {
|
||||
@@ -474,3 +484,12 @@ fn test_build_unwatch_user() {
|
||||
let expect: Vec<u8> = [6, 0, 0, 0, 3, 0, 0, 0, b'b', b'o', b'b'].to_vec();
|
||||
assert_eq!(expect, message.get_data());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn an_upload_speed_report_carries_the_rate() {
|
||||
let message = MessageFactory::build_send_upload_speed(900);
|
||||
let mut decoded = Message::new_with_data(message.get_buffer());
|
||||
assert_eq!(decoded.get_message_code(), 121);
|
||||
decoded.set_pointer(8);
|
||||
assert_eq!(decoded.read_int32(), 900);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user