|
|
- package loop
-
- import (
- "context"
-
- "github.com/lightninglabs/loop/swap"
- "github.com/lightningnetwork/lnd/lntypes"
- )
-
- // subscribeAndLogUpdates subscribes to updates for a swap and logs them. This
- // function will block, so should run as a goroutine. Note that our subscription
- // does not survive server restarts; we will simply not have update logs if the
- // server restarts during swap execution.
- func subscribeAndLogUpdates(ctx context.Context, hash lntypes.Hash,
- log *swap.PrefixLog, subscribe func(context.Context,
- lntypes.Hash) (<-chan *ServerUpdate, <-chan error, error)) {
-
- subscribeChan, errChan, err := subscribe(ctx, hash)
- if err != nil {
- log.Errorf("could not get swap subscription: %v", err)
- return
- }
-
- for {
- select {
- // Consume any updates and log them.
- case update := <-subscribeChan:
- log.Infof("Server update: %v received, "+
- "timestamp: %v", update.State, update.Timestamp)
-
- // If we get an error from the server, we check whether it is
- // due to server exit, or restart, and log this information
- // for the client. Otherwise, we just log non-nil errors.
- case err := <-errChan:
- switch err {
- case errServerSubscriptionComplete:
- log.Infof("swap subscription: %v", err)
-
- case nil:
-
- default:
- log.Errorf("swap subscription error: %v", err)
- }
-
- return
-
- // Exit if our context is cancelled.
- case <-ctx.Done():
- return
- }
- }
- }
|