github.com/status-im/status-go@v1.1.0/services/subscriptions/api.go (about)

     1  package subscriptions
     2  
     3  import (
     4  	"fmt"
     5  	"time"
     6  
     7  	"github.com/status-im/status-go/rpc"
     8  )
     9  
    10  type API struct {
    11  	rpcPrivateClientFunc func() *rpc.Client
    12  	activeSubscriptions  *Subscriptions
    13  }
    14  
    15  func NewPublicAPI(rpcPrivateClientFunc func() *rpc.Client) *API {
    16  	return &API{
    17  		rpcPrivateClientFunc: rpcPrivateClientFunc,
    18  		activeSubscriptions:  NewSubscriptions(100 * time.Millisecond),
    19  	}
    20  }
    21  
    22  func (api *API) SubscribeSignal(method string, args []interface{}) (SubscriptionID, error) {
    23  	var (
    24  		filter    filter
    25  		err       error
    26  		namespace = method[:3]
    27  	)
    28  
    29  	switch namespace {
    30  	case "shh":
    31  		filter, err = installShhFilter(api.rpcPrivateClientFunc(), method, args)
    32  	case "eth":
    33  		filter, err = installEthFilter(api.rpcPrivateClientFunc(), method, args)
    34  	default:
    35  		err = fmt.Errorf("unexpected namespace: %s", namespace)
    36  	}
    37  
    38  	if err != nil {
    39  		return "", fmt.Errorf("[SubscribeSignal] could not subscribe, failed to call %s: %v", method, err)
    40  	}
    41  
    42  	return api.activeSubscriptions.Create(namespace, filter)
    43  }
    44  
    45  func (api *API) UnsubscribeSignal(id string) error {
    46  	return api.activeSubscriptions.Remove(SubscriptionID(id))
    47  }