From d24e4712a45e03d79fa1ccb71d00c5b830d5a305 Mon Sep 17 00:00:00 2001 From: Drew DeVault Date: Thu, 1 Feb 2018 18:42:03 -0500 Subject: Reduce boilerplate in worker/UI --- worker/types/worker.go | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 worker/types/worker.go (limited to 'worker/types/worker.go') diff --git a/worker/types/worker.go b/worker/types/worker.go new file mode 100644 index 00000000..a99d4326 --- /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 +} -- cgit