diff options
author | Drew DeVault <sir@cmpwn.com> | 2018-02-01 18:42:03 -0500 |
---|---|---|
committer | Drew DeVault <sir@cmpwn.com> | 2018-02-01 18:42:03 -0500 |
commit | d24e4712a45e03d79fa1ccb71d00c5b830d5a305 (patch) | |
tree | 61e2ba149d7b1197bdc5180200a6e087844131fe /worker/types | |
parent | ee73c419507ef74a78ddd6a3466b605cba140b68 (diff) | |
download | aerc-d24e4712a45e03d79fa1ccb71d00c5b830d5a305.tar.gz |
Reduce boilerplate in worker/UI
Diffstat (limited to 'worker/types')
-rw-r--r-- | worker/types/worker.go | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/worker/types/worker.go b/worker/types/worker.go new file mode 100644 index 0000000..a99d432 --- /dev/null +++ b/worker/types/worker.go @@ -0,0 +1,59 @@ +package types + +import ( + "log" +) + +type Backend interface { + Run() +} + +type Worker struct { + Actions chan WorkerMessage + Backend Backend + Callbacks map[WorkerMessage]func(msg WorkerMessage) + Messages chan WorkerMessage + Logger *log.Logger +} + +func (worker *Worker) PostAction(msg WorkerMessage, + cb func(msg WorkerMessage)) { + + worker.Logger.Printf("=> %T\n", msg) + worker.Actions <- msg + + if cb != nil { + worker.Callbacks[msg] = cb + } +} + +func (worker *Worker) PostMessage(msg WorkerMessage, + cb func(msg WorkerMessage)) { + + worker.Logger.Printf("-> %T\n", msg) + worker.Messages <- msg + + if cb != nil { + worker.Callbacks[msg] = cb + } +} + +func (worker *Worker) ProcessMessage(msg WorkerMessage) WorkerMessage { + + worker.Logger.Printf("<= %T\n", msg) + if cb, ok := worker.Callbacks[msg.InResponseTo()]; ok { + cb(msg) + delete(worker.Callbacks, msg) + } + return msg +} + +func (worker *Worker) ProcessAction(msg WorkerMessage) WorkerMessage { + + worker.Logger.Printf("<- %T\n", msg) + if cb, ok := worker.Callbacks[msg.InResponseTo()]; ok { + cb(msg) + delete(worker.Callbacks, msg) + } + return msg +} |