Documentation ¶
Index ¶
- Constants
- func DisableLog()
- func UseLogger(logger slog.Logger)
- func Version() semver.Semver
- type DataSource
- type PubSubHub
- func (psh *PubSubHub) HubRelay() chan pstypes.HubMessage
- func (psh *PubSubHub) MempoolInventory() *exptypes.MempoolInfo
- func (psh *PubSubHub) Ready() bool
- func (psh *PubSubHub) SetReady(ready bool)
- func (psh *PubSubHub) StopWebsocketHub()
- func (psh *PubSubHub) Store(blockData *blockdata.BlockData, msgBlock *wire.MsgBlock) error
- func (psh *PubSubHub) StoreMPData(_ *mempool.StakeData, _ []exptypes.MempoolTx, inv *exptypes.MempoolInfo)
- func (psh *PubSubHub) WebSocketHandler(w http.ResponseWriter, r *http.Request)
- type State
- type WebsocketHub
- func (wsh *WebsocketHub) NewClientHubSpoke() *clientHubSpoke
- func (wsh *WebsocketHub) NumClients() int
- func (wsh *WebsocketHub) Ready() bool
- func (wsh *WebsocketHub) Run()
- func (wsh *WebsocketHub) SetReady(ready bool)
- func (wsh *WebsocketHub) SetTimeToSendTxBuffer(ready bool)
- func (wsh *WebsocketHub) Stop()
- func (wsh *WebsocketHub) TimeToSendTxBuffer() bool
- func (wsh *WebsocketHub) UnregisterClient(ch *clientHubSpoke)
Constants ¶
const ( // PingInterval is how frequently the server will ping all clients. The // clients should set their read deadlines to more than this. PingInterval = 30 * time.Second // NewTxBufferSize is the maximum length of the new transaction slice sent // to websocket clients. NewTxBufferSize = 5 )
Variables ¶
This section is empty.
Functions ¶
func DisableLog ¶
func DisableLog()
DisableLog disables all library log output. Logging output is disabled by default until UseLogger is called.
Types ¶
type DataSource ¶
type DataSource interface { GetExplorerBlock(hash string) *exptypes.BlockInfo DecodeRawTransaction(txhex string) (*chainjson.TxRawResult, error) SendRawTransaction(txhex string) (string, error) GetChainParams() *chaincfg.Params GetMempool() []exptypes.MempoolTx BlockSubsidy(height int64, voters uint16) *chainjson.GetBlockSubsidyResult Difficulty(timestamp int64) float64 }
DataSource defines the interface for collecting required data.
type PubSubHub ¶
type PubSubHub struct {
// contains filtered or unexported fields
}
PubSubHub manages the collection and distribution of block chain and mempool data to WebSocket clients.
func NewPubSubHub ¶
func NewPubSubHub(dataSource DataSource) (*PubSubHub, error)
NewPubSubHub constructs a PubSubHub given a data source. The WebSocketHub is automatically started.
func (*PubSubHub) HubRelay ¶
func (psh *PubSubHub) HubRelay() chan pstypes.HubMessage
HubRelay returns the channel used to signal to the WebSocketHub. See pstypes.HubSignal for valid signals.
func (*PubSubHub) MempoolInventory ¶
func (psh *PubSubHub) MempoolInventory() *exptypes.MempoolInfo
MempoolInventory safely retrieves the current mempool inventory.
func (*PubSubHub) StopWebsocketHub ¶
func (psh *PubSubHub) StopWebsocketHub()
StopWebsocketHub stops the websocket hub.
func (*PubSubHub) Store ¶
Store processes and stores new block data, then signals to the WebSocketHub that the new data is available.
func (*PubSubHub) StoreMPData ¶
func (psh *PubSubHub) StoreMPData(_ *mempool.StakeData, _ []exptypes.MempoolTx, inv *exptypes.MempoolInfo)
StoreMPData stores mempool data. It is advisable to pass a copy of the []exptypes.MempoolTx so that it may be modified (e.g. sorted) without affecting other MempoolDataSavers. The struct pointed to may be shared, so it should not be modified.
func (*PubSubHub) WebSocketHandler ¶
func (psh *PubSubHub) WebSocketHandler(w http.ResponseWriter, r *http.Request)
WebSocketHandler is the http.HandlerFunc for new websocket connections. The connection is registered with the WebSocketHub, and the send/receive loops are launched.
type State ¶
type State struct { // GeneralInfo contains a variety of high level status information. Much of // GeneralInfo is constant, set in the constructor, while many fields are // set when Store provides new block details. GeneralInfo *exptypes.HomeInfo // BlockInfo contains details on the most recent block. It is updated when // Store provides new block details. BlockInfo *exptypes.BlockInfo // BlockchainInfo contains the result of the getblockchaininfo RPC. It is // updated when Store provides new block details. BlockchainInfo *chainjson.GetBlockChainInfoResult // contains filtered or unexported fields }
State represents the current state of block chain.
type WebsocketHub ¶
type WebsocketHub struct { Register chan *clientHubSpoke Unregister chan *hubSpoke HubRelay chan pstypes.HubMessage // contains filtered or unexported fields }
WebsocketHub and its event loop manage all websocket client connections. WebsocketHub is responsible for closing all connections registered with it. If the event loop is running, calling (*WebsocketHub).Stop() will handle it.
func NewWebsocketHub ¶
func NewWebsocketHub() *WebsocketHub
NewWebsocketHub creates a new WebsocketHub.
func (*WebsocketHub) NewClientHubSpoke ¶
func (wsh *WebsocketHub) NewClientHubSpoke() *clientHubSpoke
NewClientHubSpoke registers a connection with the hub, and returns a pointer to the new client data object. Use UnregisterClient on this object to stop signaling messages, and close the signal channel.
func (*WebsocketHub) NumClients ¶
func (wsh *WebsocketHub) NumClients() int
NumClients returns the number of clients connected to the websocket hub.
func (*WebsocketHub) Ready ¶
func (wsh *WebsocketHub) Ready() bool
Ready is a thread-safe way to fetch the boolean in ready.
func (*WebsocketHub) Run ¶
func (wsh *WebsocketHub) Run()
Run starts the main event loop, which handles the following: 1. receiving signals on the WebsocketHub's HubRelay and broadcasting them to all registered clients, 2. registering clients, 3. unregistering clients, 4. periodically sending client's new transaction buffers, and 5. handling the shutdown signal from Stop.
func (*WebsocketHub) SetReady ¶
func (wsh *WebsocketHub) SetReady(ready bool)
SetReady is a thread-safe way to update the ready.
func (*WebsocketHub) SetTimeToSendTxBuffer ¶
func (wsh *WebsocketHub) SetTimeToSendTxBuffer(ready bool)
func (*WebsocketHub) Stop ¶
func (wsh *WebsocketHub) Stop()
Stop kills the run() loop and unregisters all clients (connections).
func (*WebsocketHub) TimeToSendTxBuffer ¶
func (wsh *WebsocketHub) TimeToSendTxBuffer() bool
func (*WebsocketHub) UnregisterClient ¶
func (wsh *WebsocketHub) UnregisterClient(ch *clientHubSpoke)
UnregisterClient unregisters the client with the hub and closes the client's update signal channel. The client is unregistered via the main run() loop, so this call will block if the run() loop is not running.