peer: extend SendMessage to allow callers to block until msg is sent

This commit is contained in:
Olaoluwa Osuntokun 2018-04-04 17:43:51 -07:00
parent b3bc374ba1
commit ca9174e166
No known key found for this signature in database
GPG Key ID: 964EA263DD637C21
2 changed files with 20 additions and 8 deletions

View File

@ -111,10 +111,9 @@ type ChannelLink interface {
// Peer is an interface which represents the remote lightning node inside our
// system.
type Peer interface {
// SendMessage sends message to remote peer. The second arguments
// denote if the method should block until the message has been sent to
// the remote peer. If set, this allows the caller to more strongly
// synchronize.
// SendMessage sends message to remote peer. The second argument
// denotes if the method should block until the message has been sent
// to the remote peer.
SendMessage(msg lnwire.Message, sync bool) error
// WipeChannel removes the channel uniquely identified by its channel

21
peer.go
View File

@ -1874,10 +1874,23 @@ func (p *peer) sendInitMsg() error {
return p.writeMessage(msg)
}
// SendMessage queues a message for sending to the target peer.
func (p *peer) SendMessage(msg lnwire.Message) error {
p.queueMsg(msg, nil)
return nil
// SendMessage sends message to remote peer. The second argument denotes if the
// method should block until the message has been sent to the remote peer.
func (p *peer) SendMessage(msg lnwire.Message, sync bool) error {
if !sync {
p.queueMsg(msg, nil)
return nil
}
errChan := make(chan error, 1)
p.queueMsg(msg, errChan)
select {
case err := <-errChan:
return err
case <-p.quit:
return fmt.Errorf("peer shutting down")
}
}
// PubKey returns the pubkey of the peer in compressed serialized format.