Better drone request cap handling
This commit is contained in:
parent
90628f3c8d
commit
e3e3a1c457
19
src/drone.rs
19
src/drone.rs
|
@ -66,8 +66,8 @@ impl Drone {
|
|||
new_addr
|
||||
}
|
||||
|
||||
pub fn check_request_limit(&mut self) -> bool {
|
||||
self.request_current <= self.request_cap
|
||||
pub fn check_request_limit(&mut self, request_amount: u64) -> bool {
|
||||
(self.request_current + request_amount) <= self.request_cap
|
||||
}
|
||||
|
||||
pub fn clear_request_count(&mut self) {
|
||||
|
@ -95,9 +95,8 @@ impl Drone {
|
|||
}
|
||||
|
||||
pub fn send_airdrop(&mut self, req: DroneRequest) -> Result<usize, io::Error> {
|
||||
|
||||
if self.check_request_limit() {
|
||||
let tx: Transaction;
|
||||
let request_amount: u64;
|
||||
let requests_socket = UdpSocket::bind("0.0.0.0:0").unwrap();
|
||||
let transactions_socket = UdpSocket::bind("0.0.0.0:0").unwrap();
|
||||
|
||||
|
@ -114,15 +113,17 @@ impl Drone {
|
|||
airdrop_request_amount,
|
||||
client_public_key,
|
||||
} => {
|
||||
self.request_current += airdrop_request_amount;
|
||||
request_amount = airdrop_request_amount.clone();
|
||||
tx = Transaction::new(
|
||||
&self.mint_keypair,
|
||||
client_public_key,
|
||||
airdrop_request_amount as i64,
|
||||
last_id,
|
||||
);
|
||||
},
|
||||
}
|
||||
}
|
||||
if self.check_request_limit(request_amount) {
|
||||
self.request_current += request_amount;
|
||||
client.transfer_signed(tx)
|
||||
} else {
|
||||
Err(Error::new(ErrorKind::Other, "token limit reached"))
|
||||
|
@ -162,9 +163,9 @@ mod tests {
|
|||
addr.set_ip(get_ip_addr().unwrap());
|
||||
let server_addr = addr.clone();
|
||||
let mut drone = Drone::new(keypair, addr, server_addr, None, Some(3));
|
||||
assert!(drone.check_request_limit());
|
||||
drone.request_current = 4;
|
||||
assert!(!drone.check_request_limit());
|
||||
assert!(drone.check_request_limit(1));
|
||||
drone.request_current = 3;
|
||||
assert!(!drone.check_request_limit(1));
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
|
Loading…
Reference in New Issue