From e687051e2a3f1b35dfd400c1555adec588a8de2d Mon Sep 17 00:00:00 2001 From: jbhusson <jonah@elixxir.io> Date: Wed, 27 Jul 2022 16:18:56 -0400 Subject: [PATCH] Fix listen to return an interface for stopping --- bindings/single.go | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/bindings/single.go b/bindings/single.go index e7949fd5f..7e93d4085 100644 --- a/bindings/single.go +++ b/bindings/single.go @@ -77,20 +77,20 @@ func TransmitSingleUse(e2eID int, recipient []byte, tag string, payload, // // Returns: // - StopFunc - a function used to stop the listener -func Listen(e2eID int, tag string, cb SingleUseCallback) (StopFunc, error) { +func Listen(e2eID int, tag string, cb SingleUseCallback) (Stopper, error) { e2eCl, err := e2eTrackerSingleton.get(e2eID) if err != nil { return nil, err } - listener := singleUseListener{scb: cb} + suListener := singleUseListener{scb: cb} dhpk, err := e2eCl.api.GetReceptionIdentity().GetDHKeyPrivate() if err != nil { return nil, err } l := single.Listen(tag, e2eCl.api.GetReceptionIdentity().ID, dhpk, - e2eCl.api.GetCmix(), e2eCl.api.GetStorage().GetE2EGroup(), listener) - return l.Stop, nil + e2eCl.api.GetCmix(), e2eCl.api.GetStorage().GetE2EGroup(), suListener) + return &stopper{l: l}, nil } // JSON Types @@ -153,9 +153,10 @@ type SingleUseCallbackReport struct { // Function Types // //////////////////////////////////////////////////////////////////////////////// -// StopFunc is the function to stop a listener returned to the bindings layer -// when one is started. -type StopFunc func() +// Stopper is a public interface returned by Listen, allowing users to stop the registered listener. +type Stopper interface { + Stop() +} // SingleUseCallback func is passed into Listen and called when messages are // received. @@ -209,6 +210,18 @@ func (sl singleUseListener) Callback( sl.scb.Callback(json.Marshal(scr)) } +/* Listener stopper */ + +// stopper is the internal struct backing the Stopper interface, allowing us +// to pass the listener Stop method to the bindings layer. +type stopper struct { + l single.Listener +} + +func (s *stopper) Stop() { + s.l.Stop() +} + /* Response Struct */ // singleUseResponse is the private struct backing SingleUseResponse, which -- GitLab