diff options
Diffstat (limited to 'internal/distributor/distributor.go')
-rw-r--r-- | internal/distributor/distributor.go | 58 |
1 files changed, 35 insertions, 23 deletions
diff --git a/internal/distributor/distributor.go b/internal/distributor/distributor.go index ab092907f..74b69c5b0 100644 --- a/internal/distributor/distributor.go +++ b/internal/distributor/distributor.go @@ -19,8 +19,8 @@ package distributor import ( - "github.com/go-fed/activity/pub" "github.com/sirupsen/logrus" + "github.com/superseriousbusiness/gotosocial/internal/db/gtsmodel" ) // Distributor should be passed to api modules (see internal/apimodule/...). It is used for @@ -30,10 +30,10 @@ import ( // fire messages into the distributor and not wait for a reply before proceeding with other work. This allows // for clean distribution of messages without slowing down the client API and harming the user experience. type Distributor interface { - // ClientAPIIn returns a channel for accepting messages that come from the gts client API. - ClientAPIIn() chan interface{} + // FromClientAPI returns a channel for accepting messages that come from the gts client API. + FromClientAPI() chan FromClientAPI // ClientAPIOut returns a channel for putting in messages that need to go to the gts client API. - ClientAPIOut() chan interface{} + ToClientAPI() chan ToClientAPI // Start starts the Distributor, reading from its channels and passing messages back and forth. Start() error // Stop stops the distributor cleanly, finishing handling any remaining messages before closing down. @@ -42,32 +42,32 @@ type Distributor interface { // distributor just implements the Distributor interface type distributor struct { - federator pub.FederatingActor - clientAPIIn chan interface{} - clientAPIOut chan interface{} - stop chan interface{} - log *logrus.Logger + // federator pub.FederatingActor + fromClientAPI chan FromClientAPI + toClientAPI chan ToClientAPI + stop chan interface{} + log *logrus.Logger } // New returns a new Distributor that uses the given federator and logger -func New(federator pub.FederatingActor, log *logrus.Logger) Distributor { +func New(log *logrus.Logger) Distributor { return &distributor{ - federator: federator, - clientAPIIn: make(chan interface{}, 100), - clientAPIOut: make(chan interface{}, 100), - stop: make(chan interface{}), - log: log, + // federator: federator, + fromClientAPI: make(chan FromClientAPI, 100), + toClientAPI: make(chan ToClientAPI, 100), + stop: make(chan interface{}), + log: log, } } // ClientAPIIn returns a channel for accepting messages that come from the gts client API. -func (d *distributor) ClientAPIIn() chan interface{} { - return d.clientAPIIn +func (d *distributor) FromClientAPI() chan FromClientAPI { + return d.fromClientAPI } // ClientAPIOut returns a channel for putting in messages that need to go to the gts client API. -func (d *distributor) ClientAPIOut() chan interface{} { - return d.clientAPIOut +func (d *distributor) ToClientAPI() chan ToClientAPI { + return d.toClientAPI } // Start starts the Distributor, reading from its channels and passing messages back and forth. @@ -76,10 +76,10 @@ func (d *distributor) Start() error { DistLoop: for { select { - case clientMsgIn := <-d.clientAPIIn: - d.log.Infof("received clientMsgIn: %+v", clientMsgIn) - case clientMsgOut := <-d.clientAPIOut: - d.log.Infof("received clientMsgOut: %+v", clientMsgOut) + case clientMsg := <-d.fromClientAPI: + d.log.Infof("received message FROM client API: %+v", clientMsg) + case clientMsg := <-d.toClientAPI: + d.log.Infof("received message TO client API: %+v", clientMsg) case <-d.stop: break DistLoop } @@ -94,3 +94,15 @@ func (d *distributor) Stop() error { close(d.stop) return nil } + +type FromClientAPI struct { + APObjectType gtsmodel.ActivityStreamsObject + APActivityType gtsmodel.ActivityStreamsActivity + Activity interface{} +} + +type ToClientAPI struct { + APObjectType gtsmodel.ActivityStreamsObject + APActivityType gtsmodel.ActivityStreamsActivity + Activity interface{} +} |