|
package consensus
|
|
|
|
import (
|
|
"github.com/tendermint/tendermint/types"
|
|
)
|
|
|
|
// XXX: WARNING: these functions can halt the consensus as firing events is synchronous.
|
|
// Make sure to read off the channels, and in the case of subscribeToEventRespond, to write back on it
|
|
|
|
// NOTE: if chanCap=0, this blocks on the event being consumed
|
|
func subscribeToEvent(evsw types.EventSwitch, receiver, eventID string, chanCap int) chan interface{} {
|
|
// listen for event
|
|
ch := make(chan interface{}, chanCap)
|
|
types.AddListenerForEvent(evsw, receiver, eventID, func(data types.TMEventData) {
|
|
ch <- data
|
|
})
|
|
return ch
|
|
}
|
|
|
|
// NOTE: this blocks on receiving a response after the event is consumed
|
|
func subscribeToEventRespond(evsw types.EventSwitch, receiver, eventID string) chan interface{} {
|
|
// listen for event
|
|
ch := make(chan interface{})
|
|
types.AddListenerForEvent(evsw, receiver, eventID, func(data types.TMEventData) {
|
|
ch <- data
|
|
<-ch
|
|
})
|
|
return ch
|
|
}
|
|
|
|
func discardFromChan(ch chan interface{}, n int) {
|
|
for i := 0; i < n; i++ {
|
|
<-ch
|
|
}
|
|
}
|