|
|
|
@ -154,7 +154,7 @@ func (s *Service) loop() { |
|
|
|
|
txSub := txpool.SubscribeNewTxsEvent(txEventCh) |
|
|
|
|
defer txSub.Unsubscribe() |
|
|
|
|
|
|
|
|
|
// Start a goroutine that exhausts the subsciptions to avoid events piling up
|
|
|
|
|
// Start a goroutine that exhausts the subscriptions to avoid events piling up
|
|
|
|
|
var ( |
|
|
|
|
quitCh = make(chan struct{}) |
|
|
|
|
headCh = make(chan *types.Block, 1) |
|
|
|
@ -194,16 +194,17 @@ func (s *Service) loop() { |
|
|
|
|
} |
|
|
|
|
close(quitCh) |
|
|
|
|
}() |
|
|
|
|
|
|
|
|
|
// Resolve the URL, defaulting to TLS, but falling back to none too
|
|
|
|
|
path := fmt.Sprintf("%s/api", s.host) |
|
|
|
|
urls := []string{path} |
|
|
|
|
|
|
|
|
|
// url.Parse and url.IsAbs is unsuitable (https://github.com/golang/go/issues/19779)
|
|
|
|
|
if !strings.Contains(path, "://") { |
|
|
|
|
urls = []string{"wss://" + path, "ws://" + path} |
|
|
|
|
} |
|
|
|
|
// Loop reporting until termination
|
|
|
|
|
for { |
|
|
|
|
// Resolve the URL, defaulting to TLS, but falling back to none too
|
|
|
|
|
path := fmt.Sprintf("%s/api", s.host) |
|
|
|
|
urls := []string{path} |
|
|
|
|
|
|
|
|
|
// url.Parse and url.IsAbs is unsuitable (https://github.com/golang/go/issues/19779)
|
|
|
|
|
if !strings.Contains(path, "://") { |
|
|
|
|
urls = []string{"wss://" + path, "ws://" + path} |
|
|
|
|
} |
|
|
|
|
// Establish a websocket connection to the server on any supported URL
|
|
|
|
|
var ( |
|
|
|
|
conn *websocket.Conn |
|
|
|
@ -240,11 +241,12 @@ func (s *Service) loop() { |
|
|
|
|
} |
|
|
|
|
// Keep sending status updates until the connection breaks
|
|
|
|
|
fullReport := time.NewTicker(15 * time.Second) |
|
|
|
|
defer fullReport.Stop() |
|
|
|
|
|
|
|
|
|
for err == nil { |
|
|
|
|
select { |
|
|
|
|
case <-quitCh: |
|
|
|
|
fullReport.Stop() |
|
|
|
|
// Make sure the connection is closed
|
|
|
|
|
conn.Close() |
|
|
|
|
return |
|
|
|
|
|
|
|
|
@ -269,6 +271,7 @@ func (s *Service) loop() { |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
fullReport.Stop() |
|
|
|
|
// Make sure the connection is closed
|
|
|
|
|
conn.Close() |
|
|
|
|
} |
|
|
|
|