diff --git a/rpcclient/examples/lbcdblocknotify/README.md b/rpcclient/examples/lbcdblocknotify/README.md new file mode 100644 index 00000000..dd284f2c --- /dev/null +++ b/rpcclient/examples/lbcdblocknotify/README.md @@ -0,0 +1,34 @@ +lbcd Websockets Example +======================= + +This example shows how to use the rpcclient package to connect to a btcd RPC +server using TLS-secured websockets, register for block connected and block +disconnected notifications, and get the current block count. + +## Running the Example + +The first step is to use `go get` to download and install the rpcclient package: + +```bash +$ go get github.com/lbryio/lbcd/rpcclient +``` + +Next, modify the `main.go` source to specify the correct RPC username and +password for the RPC server: + +```Go + User: "yourrpcuser", + Pass: "yourrpcpass", +``` + +Finally, navigate to the example's directory and run it with: + +```bash +$ git clone github.com/lbryio/lbcd +$ cd rpcclient/examples/lbcdblocknotify +$ go run . +``` + +## License + +This example is licensed under the [copyfree](http://copyfree.org) ISC License. diff --git a/rpcclient/examples/lbcdblocknotify/main.go b/rpcclient/examples/lbcdblocknotify/main.go new file mode 100644 index 00000000..0949d2be --- /dev/null +++ b/rpcclient/examples/lbcdblocknotify/main.go @@ -0,0 +1,67 @@ +// Copyright (c) 2014-2017 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package main + +import ( + "io/ioutil" + "log" + "path/filepath" + + "github.com/lbryio/lbcd/rpcclient" + "github.com/lbryio/lbcd/wire" + "github.com/lbryio/lbcutil" +) + +func main() { + // Only override the handlers for notifications you care about. + // Also note most of these handlers will only be called if you register + // for notifications. See the documentation of the rpcclient + // NotificationHandlers type for more details about each handler. + ntfnHandlers := rpcclient.NotificationHandlers{ + OnFilteredBlockConnected: func(height int32, header *wire.BlockHeader, txns []*lbcutil.Tx) { + log.Printf("Block connected: %v (%d) %v", + header.BlockHash(), height, header.Timestamp) + }, + OnFilteredBlockDisconnected: func(height int32, header *wire.BlockHeader) { + log.Printf("Block disconnected: %v (%d) %v", + header.BlockHash(), height, header.Timestamp) + }, + } + + // Connect to local lbcd RPC server using websockets. + lbcdHomeDir := lbcutil.AppDataDir("lbcd", false) + certs, err := ioutil.ReadFile(filepath.Join(lbcdHomeDir, "rpc.cert")) + if err != nil { + log.Fatal(err) + } + connCfg := &rpcclient.ConnConfig{ + Host: "localhost:9245", + Endpoint: "ws", + User: "rpcuser", + Pass: "rpcpass", + Certificates: certs, + } + client, err := rpcclient.New(connCfg, &ntfnHandlers) + if err != nil { + log.Fatalln(err) + } + + // Register for block connect and disconnect notifications. + if err := client.NotifyBlocks(); err != nil { + log.Fatalln(err) + } + log.Println("NotifyBlocks: Registration Complete") + + // Get the current block count. + blockCount, err := client.GetBlockCount() + if err != nil { + log.Fatal(err) + } + log.Printf("Block count: %d", blockCount) + + // Wait until the client either shuts down gracefully (or the user + // terminates the process with Ctrl+C). + client.WaitForShutdown() +}