diff options
Diffstat (limited to 'core/test/interface.go')
-rw-r--r-- | core/test/interface.go | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/core/test/interface.go b/core/test/interface.go index 0e963fd..9932262 100644 --- a/core/test/interface.go +++ b/core/test/interface.go @@ -46,3 +46,67 @@ type EventHandler interface { // Handle the event belongs to this handler, and return derivated events. Handle(*Event) []*Event } + +// TransportPeerType defines the type of peer, either 'peer' or 'server'. +type TransportPeerType string + +const ( + // TransportPeerServer is the type of peer server. + TransportPeerServer TransportPeerType = "server" + // TransportPeer is the type of peer. + TransportPeer TransportPeerType = "peer" +) + +// TransportEnvelope define the payload format of a message when transporting. +type TransportEnvelope struct { + // PeerType defines the type of source peer, could be either "peer" or + // "server". + PeerType TransportPeerType + // From defines the validatorID of the source peer. + From types.ValidatorID + // Msg is the actual payload of this message. + Msg interface{} +} + +// TransportServer defines the peer server in the network. +type TransportServer interface { + Transport + // Host the server, consider it's a setup procedure. The + // returned channel could be used after 'WaitForPeers' returns. + Host() (chan *TransportEnvelope, error) + // WaitForPeers waits for all peers to join the network. + WaitForPeers(numPeers int) error +} + +// TransportClient defines those peers in the network. +type TransportClient interface { + Transport + // Report a message to the peer server. + Report(msg interface{}) error + // Join the network, should block until joined. + Join(serverEndpoint interface{}) (<-chan *TransportEnvelope, error) +} + +// Transport defines the interface for basic transportation capabilities. +type Transport interface { + // Broadcast a message to all peers in network. + Broadcast(msg interface{}) error + // Send one message to a peer. + Send(endpoint types.ValidatorID, msg interface{}) error + // Close would cleanup allocated resources. + Close() error + + // Peers return IDs of all connected validators in p2p favor. + // This method should be accessed after ether 'Join' or 'WaitForPeers' + // returned. + Peers() map[types.ValidatorID]struct{} +} + +// Marshaller defines an interface to convert between interface{} and []byte. +type Marshaller interface { + // Unmarshal converts a []byte back to interface{} based on the type + // of message. + Unmarshal(msgType string, payload []byte) (msg interface{}, err error) + // Marshal converts a message to byte string + Marshal(msg interface{}) (msgType string, payload []byte, err error) +} |