renamed PayloadType -> Payload, added common reexports in messages

This commit is contained in:
debris 2016-10-14 11:44:11 +02:00
parent 4b0af4f249
commit f283197a8d
41 changed files with 94 additions and 100 deletions

View File

@ -1,5 +1,7 @@
use ser::Error as ReaderError; use ser::Error as ReaderError;
pub type MessageResult<T> = Result<T, Error>;
#[derive(Debug, PartialEq)] #[derive(Debug, PartialEq)]
pub enum Error { pub enum Error {
/// Deserialization failed. /// Deserialization failed.

View File

@ -6,13 +6,13 @@ extern crate serialization as ser;
pub mod common; pub mod common;
mod message; mod message;
pub mod serialization; mod serialization;
pub mod types; pub mod types;
mod error; mod error;
pub use primitives::{hash, bytes}; pub use primitives::{hash, bytes};
pub use message::{Message, MessageHeader}; pub use common::{Command, Magic};
pub use error::Error; pub use message::{Message, MessageHeader, Payload};
pub use serialization::PayloadType; pub use serialization::{serialize_payload, deserialize_payload};
pub type MessageResult<T> = Result<T, Error>; pub use error::{Error, MessageResult};

View File

@ -2,13 +2,13 @@ use ser::Stream;
use bytes::TaggedBytes; use bytes::TaggedBytes;
use common::Magic; use common::Magic;
use serialization::serialize_payload; use serialization::serialize_payload;
use {PayloadType, MessageResult, MessageHeader}; use {Payload, MessageResult, MessageHeader};
pub struct Message<T> { pub struct Message<T> {
bytes: TaggedBytes<T>, bytes: TaggedBytes<T>,
} }
impl<T> Message<T> where T: PayloadType { impl<T> Message<T> where T: Payload {
pub fn new(magic: Magic, version: u32, payload: &T) -> MessageResult<Self> { pub fn new(magic: Magic, version: u32, payload: &T) -> MessageResult<Self> {
let serialized = try!(serialize_payload(payload, version)); let serialized = try!(serialize_payload(payload, version));
let header = MessageHeader::for_data(magic, T::command().into(), &serialized); let header = MessageHeader::for_data(magic, T::command().into(), &serialized);

View File

@ -1,5 +1,7 @@
mod message; mod message;
mod message_header; mod message_header;
pub mod payload;
pub use self::message::Message; pub use self::message::Message;
pub use self::message_header::MessageHeader; pub use self::message_header::MessageHeader;
pub use self::payload::Payload;

View File

@ -0,0 +1,9 @@
use ser::{Reader, Stream};
use MessageResult;
pub trait Payload: Send + 'static {
fn version() -> u32;
fn command() -> &'static str;
fn deserialize_payload(reader: &mut Reader, version: u32) -> MessageResult<Self> where Self: Sized;
fn serialize_payload(&self, stream: &mut Stream, version: u32) -> MessageResult<()>;
}

View File

@ -1,14 +1,5 @@
mod stream; mod stream;
mod reader; mod reader;
pub use self::stream::{PayloadStream, serialize_payload}; pub use self::stream::serialize_payload;
pub use self::reader::{PayloadReader, deserialize_payload}; pub use self::reader::deserialize_payload;
use ser::{Reader, Stream};
use MessageResult;
pub trait PayloadType: Send + 'static {
fn version() -> u32;
fn command() -> &'static str;
fn deserialize_payload(reader: &mut Reader, version: u32) -> MessageResult<Self> where Self: Sized;
fn serialize_payload(&self, stream: &mut Stream, version: u32) -> MessageResult<()>;
}

View File

@ -1,8 +1,7 @@
use ser::Reader; use ser::Reader;
use serialization::PayloadType; use {Payload, Error};
use Error;
pub fn deserialize_payload<T>(buffer: &[u8], version: u32) -> Result<T, Error> where T: PayloadType { pub fn deserialize_payload<T>(buffer: &[u8], version: u32) -> Result<T, Error> where T: Payload {
let mut reader = PayloadReader::new(buffer, version); let mut reader = PayloadReader::new(buffer, version);
let result = try!(reader.read()); let result = try!(reader.read());
if !reader.is_finished() { if !reader.is_finished() {
@ -25,7 +24,7 @@ impl<'a> PayloadReader<'a> {
} }
} }
pub fn read<T>(&mut self) -> Result<T, Error> where T: PayloadType { pub fn read<T>(&mut self) -> Result<T, Error> where T: Payload {
if T::version() > self.version { if T::version() > self.version {
return Err(Error::InvalidVersion); return Err(Error::InvalidVersion);
} }

View File

@ -1,8 +1,8 @@
use bytes::Bytes; use bytes::Bytes;
use ser::Stream; use ser::Stream;
use {PayloadType, Error, MessageResult}; use {Payload, Error, MessageResult};
pub fn serialize_payload<T>(t: &T, version: u32) -> MessageResult<Bytes> where T: PayloadType { pub fn serialize_payload<T>(t: &T, version: u32) -> MessageResult<Bytes> where T: Payload {
let mut stream = PayloadStream::new(version); let mut stream = PayloadStream::new(version);
try!(stream.append(t)); try!(stream.append(t));
Ok(stream.out()) Ok(stream.out())
@ -21,7 +21,7 @@ impl PayloadStream {
} }
} }
pub fn append<T>(&mut self, t: &T) -> MessageResult<()> where T: PayloadType { pub fn append<T>(&mut self, t: &T) -> MessageResult<()> where T: Payload {
if T::version() > self.version { if T::version() > self.version {
return Err(Error::InvalidVersion); return Err(Error::InvalidVersion);
} }

View File

@ -3,7 +3,7 @@ use ser::{
Deserializable, Reader, Error as ReaderError, Deserializable, Reader, Error as ReaderError,
}; };
use common::NetAddress; use common::NetAddress;
use {PayloadType, MessageResult}; use {Payload, MessageResult};
#[derive(Debug, PartialEq)] #[derive(Debug, PartialEq)]
pub enum Addr { pub enum Addr {
@ -11,7 +11,7 @@ pub enum Addr {
V31402(V31402), V31402(V31402),
} }
impl PayloadType for Addr { impl Payload for Addr {
fn version() -> u32 { fn version() -> u32 {
0 0
} }

View File

@ -1,13 +1,13 @@
use ser::{Stream, Reader}; use ser::{Stream, Reader};
use common::BlockTransactions; use common::BlockTransactions;
use {MessageResult, PayloadType}; use {MessageResult, Payload};
#[derive(Debug, PartialEq)] #[derive(Debug, PartialEq)]
pub struct BlockTxn { pub struct BlockTxn {
request: BlockTransactions, request: BlockTransactions,
} }
impl PayloadType for BlockTxn { impl Payload for BlockTxn {
fn version() -> u32 { fn version() -> u32 {
70014 70014
} }

View File

@ -1,13 +1,13 @@
use ser::{Stream, Reader}; use ser::{Stream, Reader};
use common::BlockHeaderAndIDs; use common::BlockHeaderAndIDs;
use {PayloadType, MessageResult}; use {Payload, MessageResult};
#[derive(Debug, PartialEq)] #[derive(Debug, PartialEq)]
pub struct CompactBlock { pub struct CompactBlock {
header: BlockHeaderAndIDs, header: BlockHeaderAndIDs,
} }
impl PayloadType for CompactBlock { impl Payload for CompactBlock {
fn version() -> u32 { fn version() -> u32 {
70014 70014
} }

View File

@ -1,12 +1,12 @@
use ser::{Stream, Reader}; use ser::{Stream, Reader};
use {PayloadType, MessageResult}; use {Payload, MessageResult};
#[derive(Debug, PartialEq)] #[derive(Debug, PartialEq)]
pub struct FeeFilter { pub struct FeeFilter {
fee_rate: u64, fee_rate: u64,
} }
impl PayloadType for FeeFilter { impl Payload for FeeFilter {
fn version() -> u32 { fn version() -> u32 {
70013 70013
} }

View File

@ -1,6 +1,6 @@
use bytes::Bytes; use bytes::Bytes;
use ser::{Stream, Reader}; use ser::{Stream, Reader};
use {PayloadType, MessageResult}; use {Payload, MessageResult};
#[derive(Debug, PartialEq)] #[derive(Debug, PartialEq)]
pub struct FilterAdd { pub struct FilterAdd {
@ -8,7 +8,7 @@ pub struct FilterAdd {
data: Bytes, data: Bytes,
} }
impl PayloadType for FilterAdd { impl Payload for FilterAdd {
fn version() -> u32 { fn version() -> u32 {
70001 70001
} }

View File

@ -1,10 +1,10 @@
use ser::{Stream, Reader}; use ser::{Stream, Reader};
use {PayloadType, MessageResult}; use {Payload, MessageResult};
#[derive(Debug, PartialEq)] #[derive(Debug, PartialEq)]
pub struct FilterClear; pub struct FilterClear;
impl PayloadType for FilterClear { impl Payload for FilterClear {
fn version() -> u32 { fn version() -> u32 {
70001 70001
} }

View File

@ -1,6 +1,6 @@
use bytes::Bytes; use bytes::Bytes;
use ser::{Stream, Reader}; use ser::{Stream, Reader};
use {PayloadType, MessageResult}; use {Payload, MessageResult};
#[derive(Debug, PartialEq)] #[derive(Debug, PartialEq)]
pub struct FilterLoad { pub struct FilterLoad {
@ -11,7 +11,7 @@ pub struct FilterLoad {
flags: u8, flags: u8,
} }
impl PayloadType for FilterLoad { impl Payload for FilterLoad {
fn version() -> u32 { fn version() -> u32 {
70001 70001
} }

View File

@ -1,10 +1,10 @@
use ser::{Stream, Reader}; use ser::{Stream, Reader};
use {PayloadType, MessageResult}; use {Payload, MessageResult};
#[derive(Debug, PartialEq)] #[derive(Debug, PartialEq)]
pub struct GetAddr; pub struct GetAddr;
impl PayloadType for GetAddr { impl Payload for GetAddr {
fn version() -> u32 { fn version() -> u32 {
60002 60002
} }

View File

@ -1,6 +1,6 @@
use hash::H256; use hash::H256;
use ser::{Stream, Reader}; use ser::{Stream, Reader};
use {PayloadType, MessageResult}; use {Payload, MessageResult};
#[derive(Debug, PartialEq)] #[derive(Debug, PartialEq)]
pub struct GetBlocks { pub struct GetBlocks {
@ -9,7 +9,7 @@ pub struct GetBlocks {
hash_stop: H256, hash_stop: H256,
} }
impl PayloadType for GetBlocks { impl Payload for GetBlocks {
fn version() -> u32 { fn version() -> u32 {
0 0
} }

View File

@ -1,13 +1,13 @@
use ser::{Stream, Reader}; use ser::{Stream, Reader};
use common::BlockTransactionsRequest; use common::BlockTransactionsRequest;
use {PayloadType, MessageResult}; use {Payload, MessageResult};
#[derive(Debug, PartialEq)] #[derive(Debug, PartialEq)]
pub struct GetBlockTxn { pub struct GetBlockTxn {
request: BlockTransactionsRequest, request: BlockTransactionsRequest,
} }
impl PayloadType for GetBlockTxn { impl Payload for GetBlockTxn {
fn version() -> u32 { fn version() -> u32 {
70014 70014
} }

View File

@ -1,13 +1,13 @@
use ser::{Stream, Reader}; use ser::{Stream, Reader};
use common::InventoryVector; use common::InventoryVector;
use {PayloadType, MessageResult}; use {Payload, MessageResult};
#[derive(Debug, PartialEq)] #[derive(Debug, PartialEq)]
pub struct GetData { pub struct GetData {
pub inventory: Vec<InventoryVector>, pub inventory: Vec<InventoryVector>,
} }
impl PayloadType for GetData { impl Payload for GetData {
fn version() -> u32 { fn version() -> u32 {
0 0
} }

View File

@ -1,6 +1,6 @@
use hash::H256; use hash::H256;
use ser::{Stream, Reader}; use ser::{Stream, Reader};
use {PayloadType, MessageResult}; use {Payload, MessageResult};
#[derive(Debug, PartialEq)] #[derive(Debug, PartialEq)]
pub struct GetHeaders { pub struct GetHeaders {
@ -9,7 +9,7 @@ pub struct GetHeaders {
hash_stop: H256, hash_stop: H256,
} }
impl PayloadType for GetHeaders { impl Payload for GetHeaders {
fn version() -> u32 { fn version() -> u32 {
0 0
} }

View File

@ -1,6 +1,6 @@
use chain::BlockHeader; use chain::BlockHeader;
use ser::{Stream, Reader}; use ser::{Stream, Reader};
use {PayloadType, MessageResult}; use {Payload, MessageResult};
#[derive(Debug, PartialEq)] #[derive(Debug, PartialEq)]
pub struct Headers { pub struct Headers {
@ -8,7 +8,7 @@ pub struct Headers {
headers: Vec<BlockHeader>, headers: Vec<BlockHeader>,
} }
impl PayloadType for Headers { impl Payload for Headers {
fn version() -> u32 { fn version() -> u32 {
0 0
} }

View File

@ -1,13 +1,13 @@
use ser::{Stream, Reader}; use ser::{Stream, Reader};
use common::InventoryVector; use common::InventoryVector;
use {PayloadType, MessageResult}; use {Payload, MessageResult};
#[derive(Debug, PartialEq)] #[derive(Debug, PartialEq)]
pub struct Inv { pub struct Inv {
pub inventory: Vec<InventoryVector>, pub inventory: Vec<InventoryVector>,
} }
impl PayloadType for Inv { impl Payload for Inv {
fn version() -> u32 { fn version() -> u32 {
0 0
} }

View File

@ -1,10 +1,10 @@
use ser::{Stream, Reader}; use ser::{Stream, Reader};
use {PayloadType, MessageResult}; use {Payload, MessageResult};
#[derive(Debug, PartialEq)] #[derive(Debug, PartialEq)]
pub struct MemPool; pub struct MemPool;
impl PayloadType for MemPool { impl Payload for MemPool {
fn version() -> u32 { fn version() -> u32 {
60002 60002
} }

View File

@ -2,7 +2,7 @@ use hash::H256;
use bytes::Bytes; use bytes::Bytes;
use ser::{Stream, Reader}; use ser::{Stream, Reader};
use chain::BlockHeader; use chain::BlockHeader;
use {PayloadType, MessageResult}; use {Payload, MessageResult};
#[derive(Debug, PartialEq)] #[derive(Debug, PartialEq)]
pub struct MerkleBlock { pub struct MerkleBlock {
@ -12,7 +12,7 @@ pub struct MerkleBlock {
flags: Bytes, flags: Bytes,
} }
impl PayloadType for MerkleBlock { impl Payload for MerkleBlock {
fn version() -> u32 { fn version() -> u32 {
70014 70014
} }

View File

@ -1,13 +1,13 @@
use ser::{Stream, Reader}; use ser::{Stream, Reader};
use common::InventoryVector; use common::InventoryVector;
use {PayloadType, MessageResult}; use {Payload, MessageResult};
#[derive(Debug, PartialEq)] #[derive(Debug, PartialEq)]
pub struct NotFound { pub struct NotFound {
pub inventory: Vec<InventoryVector>, pub inventory: Vec<InventoryVector>,
} }
impl PayloadType for NotFound { impl Payload for NotFound {
fn version() -> u32 { fn version() -> u32 {
0 0
} }

View File

@ -1,12 +1,12 @@
use ser::{Stream, Reader}; use ser::{Stream, Reader};
use {MessageResult, PayloadType}; use {MessageResult, Payload};
#[derive(Debug, PartialEq)] #[derive(Debug, PartialEq)]
pub struct Ping { pub struct Ping {
pub nonce: u64, pub nonce: u64,
} }
impl PayloadType for Ping { impl Payload for Ping {
fn version() -> u32 { fn version() -> u32 {
0 0
} }

View File

@ -1,12 +1,12 @@
use ser::{Stream, Reader}; use ser::{Stream, Reader};
use {PayloadType, MessageResult}; use {Payload, MessageResult};
#[derive(Debug, PartialEq)] #[derive(Debug, PartialEq)]
pub struct Pong { pub struct Pong {
pub nonce: u64, pub nonce: u64,
} }
impl PayloadType for Pong { impl Payload for Pong {
fn version() -> u32 { fn version() -> u32 {
0 0
} }

View File

@ -1,5 +1,5 @@
use ser::{Serializable, Stream, Deserializable, Reader, Error as ReaderError}; use ser::{Serializable, Stream, Deserializable, Reader, Error as ReaderError};
use {PayloadType, MessageResult}; use {Payload, MessageResult};
#[derive(Debug, PartialEq, Clone, Copy)] #[derive(Debug, PartialEq, Clone, Copy)]
#[repr(u8)] #[repr(u8)]
@ -59,7 +59,7 @@ pub struct Reject {
// TODO: data // TODO: data
} }
impl PayloadType for Reject { impl Payload for Reject {
fn version() -> u32 { fn version() -> u32 {
0 0
} }

View File

@ -1,5 +1,5 @@
use ser::{Stream, Reader}; use ser::{Stream, Reader};
use {PayloadType, MessageResult}; use {Payload, MessageResult};
#[derive(Debug, PartialEq)] #[derive(Debug, PartialEq)]
pub struct SendCompact { pub struct SendCompact {
@ -7,7 +7,7 @@ pub struct SendCompact {
second: u64, second: u64,
} }
impl PayloadType for SendCompact { impl Payload for SendCompact {
fn version() -> u32 { fn version() -> u32 {
70014 70014
} }

View File

@ -1,10 +1,10 @@
use ser::{Stream, Reader}; use ser::{Stream, Reader};
use {PayloadType, MessageResult}; use {Payload, MessageResult};
#[derive(Debug, PartialEq)] #[derive(Debug, PartialEq)]
pub struct SendHeaders; pub struct SendHeaders;
impl PayloadType for SendHeaders { impl Payload for SendHeaders {
fn version() -> u32 { fn version() -> u32 {
70012 70012
} }

View File

@ -1,10 +1,10 @@
use ser::{Stream, Reader}; use ser::{Stream, Reader};
use {PayloadType, MessageResult}; use {Payload, MessageResult};
#[derive(Debug, PartialEq)] #[derive(Debug, PartialEq)]
pub struct Verack; pub struct Verack;
impl PayloadType for Verack { impl Payload for Verack {
fn version() -> u32 { fn version() -> u32 {
0 0
} }

View File

@ -4,7 +4,7 @@ use ser::{
Deserializable, Reader, Error as ReaderError, Deserializable, Reader, Error as ReaderError,
}; };
use common::{NetAddress, ServiceFlags}; use common::{NetAddress, ServiceFlags};
use {PayloadType, MessageResult}; use {Payload, MessageResult};
use serialization::deserialize_payload; use serialization::deserialize_payload;
#[derive(Debug, PartialEq)] #[derive(Debug, PartialEq)]
@ -14,7 +14,7 @@ pub enum Version {
V70001(V0, V106, V70001), V70001(V0, V106, V70001),
} }
impl PayloadType for Version { impl Payload for Version {
fn version() -> u32 { fn version() -> u32 {
0 0
} }

View File

@ -1,8 +1,7 @@
use std::io; use std::io;
use futures::{Future, Poll, Async}; use futures::{Future, Poll, Async};
use tokio_core::io::{ReadExact, read_exact}; use tokio_core::io::{ReadExact, read_exact};
use message::{MessageHeader, MessageResult}; use message::{MessageHeader, MessageResult, Magic};
use message::common::Magic;
pub fn read_header<A>(a: A, magic: Magic) -> ReadHeader<A> where A: io::Read { pub fn read_header<A>(a: A, magic: Magic) -> ReadHeader<A> where A: io::Read {
ReadHeader { ReadHeader {

View File

@ -1,13 +1,11 @@
use std::io; use std::io;
use std::marker::PhantomData; use std::marker::PhantomData;
use futures::{Poll, Future, Async}; use futures::{Poll, Future, Async};
use message::{MessageResult, Error}; use message::{MessageResult, Error, Magic, Payload};
use message::common::Magic;
use message::serialization::PayloadType;
use io::{read_header, ReadHeader, read_payload, ReadPayload}; use io::{read_header, ReadHeader, read_payload, ReadPayload};
pub fn read_message<M, A>(a: A, magic: Magic, version: u32) -> ReadMessage<M, A> pub fn read_message<M, A>(a: A, magic: Magic, version: u32) -> ReadMessage<M, A>
where A: io::Read, M: PayloadType { where A: io::Read, M: Payload {
ReadMessage { ReadMessage {
state: ReadMessageState::ReadHeader { state: ReadMessageState::ReadHeader {
version: version, version: version,
@ -33,7 +31,7 @@ pub struct ReadMessage<M, A> {
message_type: PhantomData<M>, message_type: PhantomData<M>,
} }
impl<M, A> Future for ReadMessage<M, A> where A: io::Read, M: PayloadType { impl<M, A> Future for ReadMessage<M, A> where A: io::Read, M: Payload {
type Item = (A, MessageResult<M>); type Item = (A, MessageResult<M>);
type Error = io::Error; type Error = io::Error;

View File

@ -3,8 +3,7 @@ use futures::{Future, Poll, Async};
use futures::stream::Stream; use futures::stream::Stream;
use tokio_core::io::{read_exact, ReadExact}; use tokio_core::io::{read_exact, ReadExact};
use crypto::checksum; use crypto::checksum;
use message::{Error, MessageHeader, MessageResult}; use message::{Error, MessageHeader, MessageResult, Magic, Command};
use message::common::{Magic, Command};
use bytes::Bytes; use bytes::Bytes;
use io::{read_header, ReadHeader}; use io::{read_header, ReadHeader};

View File

@ -5,11 +5,10 @@ use tokio_core::io::{read_exact, ReadExact};
use bytes::Bytes; use bytes::Bytes;
use hash::H32; use hash::H32;
use crypto::checksum; use crypto::checksum;
use message::{Error, MessageResult}; use message::{Error, MessageResult, Payload, deserialize_payload};
use message::serialization::{PayloadType, deserialize_payload};
pub fn read_payload<M, A>(a: A, version: u32, len: usize, checksum: H32) -> ReadPayload<M, A> pub fn read_payload<M, A>(a: A, version: u32, len: usize, checksum: H32) -> ReadPayload<M, A>
where A: io::Read, M: PayloadType { where A: io::Read, M: Payload {
ReadPayload { ReadPayload {
reader: read_exact(a, Bytes::new_with_len(len)), reader: read_exact(a, Bytes::new_with_len(len)),
version: version, version: version,
@ -25,7 +24,7 @@ pub struct ReadPayload<M, A> {
payload_type: PhantomData<M>, payload_type: PhantomData<M>,
} }
impl<M, A> Future for ReadPayload<M, A> where A: io::Read, M: PayloadType { impl<M, A> Future for ReadPayload<M, A> where A: io::Read, M: Payload {
type Item = (A, MessageResult<M>); type Item = (A, MessageResult<M>);
type Error = io::Error; type Error = io::Error;

View File

@ -3,8 +3,7 @@ use futures::Poll;
use futures::stream::Stream; use futures::stream::Stream;
use parking_lot::Mutex; use parking_lot::Mutex;
use bytes::Bytes; use bytes::Bytes;
use message::{MessageResult, PayloadType}; use message::{MessageResult, Payload, Command};
use message::common::Command;
use net::Connection; use net::Connection;
use io::{read_message_stream, ReadMessageStream, SharedTcpStream, WriteMessage}; use io::{read_message_stream, ReadMessageStream, SharedTcpStream, WriteMessage};
@ -22,7 +21,7 @@ impl Channel {
} }
} }
pub fn write_message<T>(&self, payload: &T) -> WriteMessage<T, SharedTcpStream> where T: PayloadType { pub fn write_message<T>(&self, payload: &T) -> WriteMessage<T, SharedTcpStream> where T: Payload {
self.connection.write_message(payload) self.connection.write_message(payload)
} }

View File

@ -1,6 +1,5 @@
use std::net; use std::net;
use message::{Message, PayloadType}; use message::{Message, Payload, Magic};
use message::common::Magic;
use io::{write_message, WriteMessage, SharedTcpStream}; use io::{write_message, WriteMessage, SharedTcpStream};
pub struct Connection { pub struct Connection {
@ -11,7 +10,7 @@ pub struct Connection {
} }
impl Connection { impl Connection {
pub fn write_message<T>(&self, payload: &T) -> WriteMessage<T, SharedTcpStream> where T: PayloadType { pub fn write_message<T>(&self, payload: &T) -> WriteMessage<T, SharedTcpStream> where T: Payload {
let message = match Message::new(self.magic, self.version, payload) { let message = match Message::new(self.magic, self.version, payload) {
Ok(message) => message, Ok(message) => message,
Err(_err) => { Err(_err) => {

View File

@ -5,7 +5,7 @@ use parking_lot::RwLock;
use futures::{finished, Future}; use futures::{finished, Future};
use futures_cpupool::CpuPool; use futures_cpupool::CpuPool;
use tokio_core::reactor::Handle; use tokio_core::reactor::Handle;
use message::PayloadType; use message::Payload;
use net::{Connection, Channel}; use net::{Connection, Channel};
use PeerId; use PeerId;
@ -24,7 +24,7 @@ impl Connections {
/// Broadcast messages to the network. /// Broadcast messages to the network.
/// Returned future completes of first confirmed receive. /// Returned future completes of first confirmed receive.
pub fn broadcast<T>(connections: &Arc<Connections>, handle: &Handle, pool: &CpuPool, payload: T) where T: PayloadType { pub fn broadcast<T>(connections: &Arc<Connections>, handle: &Handle, pool: &CpuPool, payload: T) where T: Payload {
let channels = connections.channels(); let channels = connections.channels();
for (id, channel) in channels.into_iter() { for (id, channel) in channels.into_iter() {
let write = channel.write_message(&payload); let write = channel.write_message(&payload);

View File

@ -1,10 +1,8 @@
use std::sync::mpsc::{Sender, Receiver, channel}; use std::sync::mpsc::{Sender, Receiver, channel};
use std::mem; use std::mem;
use parking_lot::Mutex; use parking_lot::Mutex;
use message::{Error, PayloadType}; use message::{Error, Payload, Command, deserialize_payload};
use message::common::Command;
use message::types::{Addr, GetAddr}; use message::types::{Addr, GetAddr};
use message::serialization::deserialize_payload;
use PeerId; use PeerId;
struct Handler<S> { struct Handler<S> {
@ -19,7 +17,7 @@ impl<S> Default for Handler<S> {
} }
} }
impl<S> Handler<S> where S: PayloadType { impl<S> Handler<S> where S: Payload {
fn command(&self) -> Command { fn command(&self) -> Command {
S::command().into() S::command().into()
} }

View File

@ -4,7 +4,7 @@ use futures::{Future, finished};
use futures::stream::Stream; use futures::stream::Stream;
use futures_cpupool::CpuPool; use futures_cpupool::CpuPool;
use tokio_core::reactor::Handle; use tokio_core::reactor::Handle;
use message::PayloadType; use message::Payload;
use net::{connect, listen, Connections, Subscriber, MessagesHandler}; use net::{connect, listen, Connections, Subscriber, MessagesHandler};
use Config; use Config;
@ -90,7 +90,7 @@ impl P2P {
self.event_loop_handle.spawn(pool_work); self.event_loop_handle.spawn(pool_work);
} }
pub fn broadcast<T>(&self, payload: T) where T: PayloadType { pub fn broadcast<T>(&self, payload: T) where T: Payload {
Connections::broadcast(&self.connections, &self.event_loop_handle, &self.pool, payload) Connections::broadcast(&self.connections, &self.event_loop_handle, &self.pool, payload)
} }
} }