OSDN Git Service

fix the bug (#372)
[bytom/vapor.git] / p2p / base_reactor.go
1 package p2p
2
3 import (
4         cmn "github.com/tendermint/tmlibs/common"
5
6         "github.com/vapor/p2p/connection"
7 )
8
9 //Reactor is responsible for handling incoming messages of one or more `Channels`
10 type Reactor interface {
11         cmn.Service // Start, Stop
12
13         // SetSwitch allows setting a switch.
14         SetSwitch(*Switch)
15
16         // GetChannels returns the list of channel descriptors.
17         GetChannels() []*connection.ChannelDescriptor
18
19         // AddPeer is called by the switch when a new peer is added.
20         AddPeer(peer *Peer) error
21
22         // RemovePeer is called by the switch when the peer is stopped (due to error
23         // or other reason).
24         RemovePeer(peer *Peer, reason interface{})
25
26         // Receive is called when msgBytes is received from peer.
27         //
28         // NOTE reactor can not keep msgBytes around after Receive completes without
29         // copying.
30         //
31         // CONTRACT: msgBytes are not nil.
32         Receive(chID byte, peer *Peer, msgBytes []byte)
33 }
34
35 //BaseReactor base service of a reactor
36 type BaseReactor struct {
37         cmn.BaseService // Provides Start, Stop, .Quit
38         Switch          *Switch
39 }
40
41 //NewBaseReactor create new base Reactor
42 func NewBaseReactor(name string, impl Reactor) *BaseReactor {
43         return &BaseReactor{
44                 BaseService: *cmn.NewBaseService(nil, name, impl),
45                 Switch:      nil,
46         }
47 }
48
49 //SetSwitch setting a switch for reactor
50 func (br *BaseReactor) SetSwitch(sw *Switch) {
51         br.Switch = sw
52 }
53
54 //GetChannels returns the list of channel descriptors
55 func (*BaseReactor) GetChannels() []*connection.ChannelDescriptor { return nil }
56
57 //AddPeer is called by the switch when a new peer is added
58 func (*BaseReactor) AddPeer(peer *Peer) {}
59
60 //RemovePeer is called by the switch when the peer is stopped (due to error or other reason)
61 func (*BaseReactor) RemovePeer(peer *Peer, reason interface{}) {}
62
63 //Receive is called when msgBytes is received from peer
64 func (*BaseReactor) Receive(chID byte, peer *Peer, msgBytes []byte) {}