1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
mod addr;
mod ping;
mod sync;

use bytes::Bytes;
use message::Error;
use message::common::Command;

pub use self::addr::{AddrProtocol, SeednodeProtocol};
pub use self::ping::PingProtocol;
pub use self::sync::{SyncProtocol, InboundSyncConnection, InboundSyncConnectionRef, OutboundSyncConnection, OutboundSyncConnectionRef, LocalSyncNode, LocalSyncNodeRef};

pub trait Protocol: Send {
	/// Initialize the protocol.
	fn initialize(&mut self) {}

	/// Maintain the protocol.
	fn maintain(&mut self) {}

	/// Handle the message.
	fn on_message(&mut self, command: &Command, payload: &Bytes) -> Result<(), Error>;

	/// On disconnect.
	fn on_close(&mut self) {}

	/// Boxes the protocol.
	fn boxed(self) -> Box<Protocol> where Self: Sized + 'static {
		Box::new(self)
	}
}