tendermint/rpc/core/events.go

25 lines
1.0 KiB
Go
Raw Normal View History

2016-01-02 16:23:29 -08:00
package core
import (
ctypes "github.com/tendermint/tendermint/rpc/core/types"
"github.com/tendermint/tendermint/rpc/lib/types"
2016-01-13 15:38:55 -08:00
"github.com/tendermint/tendermint/types"
2016-01-02 16:23:29 -08:00
)
func Subscribe(wsCtx rpctypes.WSRPCContext, event string) (*ctypes.ResultSubscribe, error) {
2017-05-02 00:53:32 -07:00
logger.Info("Subscribe to event", "remote", wsCtx.GetRemoteAddr(), "event", event)
2016-10-09 23:58:13 -07:00
types.AddListenerForEvent(wsCtx.GetEventSwitch(), wsCtx.GetRemoteAddr(), event, func(msg types.TMEventData) {
2016-01-02 16:23:29 -08:00
// NOTE: EventSwitch callbacks must be nonblocking
// NOTE: RPCResponses of subscribed events have id suffix "#event"
2017-04-28 19:26:17 -07:00
tmResult := &ctypes.ResultEvent{event, msg}
wsCtx.TryWriteRPCResponse(rpctypes.NewRPCResponse(wsCtx.Request.ID+"#event", tmResult, ""))
2016-01-02 16:23:29 -08:00
})
return &ctypes.ResultSubscribe{}, nil
}
func Unsubscribe(wsCtx rpctypes.WSRPCContext, event string) (*ctypes.ResultUnsubscribe, error) {
2017-05-02 00:53:32 -07:00
logger.Info("Unsubscribe to event", "remote", wsCtx.GetRemoteAddr(), "event", event)
2016-08-23 02:40:42 -07:00
wsCtx.GetEventSwitch().RemoveListenerForEvent(event, wsCtx.GetRemoteAddr())
2016-01-02 16:23:29 -08:00
return &ctypes.ResultUnsubscribe{}, nil
}