Skip to content

Commit

Permalink
Merge pull request #222 from Freaky/ping-wait
Browse files Browse the repository at this point in the history
Disable Pinger until after MOTD
  • Loading branch information
aatxe authored Nov 17, 2020
2 parents 7377247 + 4c27a95 commit d6bb670
Showing 1 changed file with 12 additions and 3 deletions.
15 changes: 12 additions & 3 deletions src/client/transport.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,14 @@ use tokio_util::codec::Framed;
use crate::{
client::data::Config,
error,
proto::{Command, IrcCodec, Message},
proto::{Command, Response, IrcCodec, Message},
};

/// Pinger-based futures helper.
struct Pinger {
tx: UnboundedSender<Message>,
// Whether this pinger pings.
enabled: bool,
/// The amount of time to wait before timing out from no ping response.
ping_timeout: Duration,
/// The instant that the last ping was sent to the server.
Expand All @@ -42,6 +44,7 @@ impl Pinger {

Self {
tx,
enabled: false,
ping_timeout,
ping_deadline: None,
ping_interval: time::interval(ping_time),
Expand All @@ -51,6 +54,10 @@ impl Pinger {
/// Handle an incoming message.
fn handle_message(&mut self, message: &Message) -> error::Result<()> {
match message.command {
Command::Response(Response::RPL_ENDOFMOTD, _)
| Command::Response(Response::ERR_NOMOTD, _) => {
self.enabled = true;
}
// On receiving a `PING` message from the server, we automatically respond with
// the appropriate `PONG` message to keep the connection alive for transport.
Command::PING(ref data, _) => {
Expand Down Expand Up @@ -109,8 +116,10 @@ impl Future for Pinger {
}

if let Poll::Ready(_) = Pin::new(&mut self.as_mut().ping_interval).poll_next(cx) {
self.as_mut().send_ping()?;
self.as_mut().set_deadline();
if self.enabled {
self.as_mut().send_ping()?;
self.as_mut().set_deadline();
}
}

Poll::Pending
Expand Down

0 comments on commit d6bb670

Please sign in to comment.