From 4d9a2f5cc15b1f20945491fa2a21434a9a17e4ff Mon Sep 17 00:00:00 2001 From: peter Date: Tue, 18 Oct 2022 16:56:43 +0800 Subject: [PATCH] lbcdblocknotify: support multiple stratum server --- rpcclient/examples/lbcdblocknotify/main.go | 88 +++++++++++++--------- 1 file changed, 53 insertions(+), 35 deletions(-) diff --git a/rpcclient/examples/lbcdblocknotify/main.go b/rpcclient/examples/lbcdblocknotify/main.go index 27cdf329b7..d1a97a804c 100644 --- a/rpcclient/examples/lbcdblocknotify/main.go +++ b/rpcclient/examples/lbcdblocknotify/main.go @@ -2,6 +2,7 @@ package main import ( "flag" + "fmt" "log" "os/exec" "path/filepath" @@ -10,56 +11,73 @@ import ( "github.com/lbryio/lbcutil" ) +type stratumFlag []string + var ( lbcdHomeDir = lbcutil.AppDataDir("lbcd", false) defaultCert = filepath.Join(lbcdHomeDir, "rpc.cert") + stratumList stratumFlag ) var ( - coinid = flag.String("coinid", "1425", "Coin ID") - stratumServer = flag.String("stratum", "", "Stratum server") - stratumPass = flag.String("stratumpass", "", "Stratum server password") - rpcserver = flag.String("rpcserver", "localhost:9245", "LBCD RPC server") - rpcuser = flag.String("rpcuser", "rpcuser", "LBCD RPC username") - rpcpass = flag.String("rpcpass", "rpcpass", "LBCD RPC password") - rpccert = flag.String("rpccert", defaultCert, "LBCD RPC certificate") - notls = flag.Bool("notls", false, "Connect to LBCD with TLS disabled") - run = flag.String("run", "", "Run custom shell command") - quiet = flag.Bool("quiet", false, "Do not print logs") + coinid = flag.String("coinid", "1425", "Coin ID") + stratumPass = flag.String("stratumpass", "", "Stratum server password") + rpcserver = flag.String("rpcserver", "localhost:9245", "LBCD RPC server") + rpcuser = flag.String("rpcuser", "rpcuser", "LBCD RPC username") + rpcpass = flag.String("rpcpass", "rpcpass", "LBCD RPC password") + rpccert = flag.String("rpccert", defaultCert, "LBCD RPC certificate") + notls = flag.Bool("notls", false, "Connect to LBCD with TLS disabled") + run = flag.String("run", "", "Run custom shell command") + quiet = flag.Bool("quiet", false, "Do not print logs") ) func main() { + flag.Var(&stratumList, "stratum", "--stratum=stratum1 --stratum=stratum2") flag.Parse() + for _, stratum := range stratumList { + go func(stratum string) { + // Setup notification handler + b := newBridge(stratum, *stratumPass, *coinid) - // Setup notification handler - b := newBridge(*stratumServer, *stratumPass, *coinid) + if len(*run) > 0 { + // Check if ccommand exists. + strs := strings.Split(*run, " ") + cmd := strs[0] + _, err := exec.LookPath(cmd) + if err != nil { + log.Fatalf("ERROR: %s not found: %s", cmd, err) + } + b.customCmd = *run + } - if len(*run) > 0 { - // Check if ccommand exists. - strs := strings.Split(*run, " ") - cmd := strs[0] - _, err := exec.LookPath(cmd) - if err != nil { - log.Fatalf("ERROR: %s not found: %s", cmd, err) - } - b.customCmd = *run - } + // Start the eventt handler. + go b.start() + + // Adaptater receives lbcd notifications, and emit events. + adpt := adapter{b} - // Start the eventt handler. - go b.start() + client := newLbcdClient(*rpcserver, *rpcuser, *rpcpass, *notls, adpt) - // Adaptater receives lbcd notifications, and emit events. - adpt := adapter{b} + go func() { + err := <-b.errorc + log.Fatalf("ERROR: %s", err) + client.Shutdown() + }() + // Wait until the client either shuts down gracefully (or the user + // terminates the process with Ctrl+C). + client.WaitForShutdown() + }(stratum) + } - client := newLbcdClient(*rpcserver, *rpcuser, *rpcpass, *notls, adpt) + quit := make(chan bool) + <-quit +} - go func() { - err := <-b.errorc - log.Fatalf("ERROR: %s", err) - client.Shutdown() - }() +func (f *stratumFlag) String() string { + return fmt.Sprintf("%v", []string(*f)) +} - // Wait until the client either shuts down gracefully (or the user - // terminates the process with Ctrl+C). - client.WaitForShutdown() +func (f *stratumFlag) Set(value string) error { + *f = append(*f, value) + return nil }