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 }