Some checks are pending
docker-build-cometbft / vars (push) Waiting to run
docker-build-cometbft / build-images (amd64, ubuntu-24.04) (push) Blocked by required conditions
docker-build-cometbft / build-images (arm64, ubuntu-24.04-arm) (push) Blocked by required conditions
docker-build-cometbft / merge-images (push) Blocked by required conditions
docker-build-e2e-node / vars (push) Waiting to run
docker-build-e2e-node / build-images (amd64, ubuntu-24.04) (push) Blocked by required conditions
docker-build-e2e-node / build-images (arm64, ubuntu-24.04-arm) (push) Blocked by required conditions
docker-build-e2e-node / merge-images (push) Blocked by required conditions
67 lines
2.4 KiB
Go
67 lines
2.4 KiB
Go
package p2p
|
|
|
|
import (
|
|
"git.cw.tr/mukan-network/mukan-consensus/libs/service"
|
|
"git.cw.tr/mukan-network/mukan-consensus/p2p/conn"
|
|
)
|
|
|
|
// Reactor is responsible for handling incoming messages on one or more
|
|
// Channel. Switch calls GetChannels when reactor is added to it. When a new
|
|
// peer joins our node, InitPeer and AddPeer are called. RemovePeer is called
|
|
// when the peer is stopped. Receive is called when a message is received on a
|
|
// channel associated with this reactor.
|
|
//
|
|
// Peer#Send or Peer#TrySend should be used to send the message to a peer.
|
|
type Reactor interface {
|
|
service.Service // Start, Stop
|
|
|
|
// SetSwitch allows setting a switch.
|
|
SetSwitch(*Switch)
|
|
|
|
// GetChannels returns the list of MConnection.ChannelDescriptor. Make sure
|
|
// that each ID is unique across all the reactors added to the switch.
|
|
GetChannels() []*conn.ChannelDescriptor
|
|
|
|
// InitPeer is called by the switch before the peer is started. Use it to
|
|
// initialize data for the peer (e.g. peer state).
|
|
//
|
|
// NOTE: The switch won't call AddPeer nor RemovePeer if it fails to start
|
|
// the peer. Do not store any data associated with the peer in the reactor
|
|
// itself unless you don't want to have a state, which is never cleaned up.
|
|
InitPeer(peer Peer) Peer
|
|
|
|
// AddPeer is called by the switch after the peer is added and successfully
|
|
// started. Use it to start goroutines communicating with the peer.
|
|
AddPeer(peer Peer)
|
|
|
|
// RemovePeer is called by the switch when the peer is stopped (due to error
|
|
// or other reason).
|
|
RemovePeer(peer Peer, reason interface{})
|
|
|
|
// Receive is called by the switch when an envelope is received from any connected
|
|
// peer on any of the channels registered by the reactor
|
|
Receive(Envelope)
|
|
}
|
|
|
|
//--------------------------------------
|
|
|
|
type BaseReactor struct {
|
|
service.BaseService // Provides Start, Stop, .Quit
|
|
Switch *Switch
|
|
}
|
|
|
|
func NewBaseReactor(name string, impl Reactor) *BaseReactor {
|
|
return &BaseReactor{
|
|
BaseService: *service.NewBaseService(nil, name, impl),
|
|
Switch: nil,
|
|
}
|
|
}
|
|
|
|
func (br *BaseReactor) SetSwitch(sw *Switch) {
|
|
br.Switch = sw
|
|
}
|
|
func (*BaseReactor) GetChannels() []*conn.ChannelDescriptor { return nil }
|
|
func (*BaseReactor) AddPeer(Peer) {}
|
|
func (*BaseReactor) RemovePeer(Peer, interface{}) {}
|
|
func (*BaseReactor) Receive(Envelope) {}
|
|
func (*BaseReactor) InitPeer(peer Peer) Peer { return peer }
|