aboutsummaryrefslogtreecommitdiff
path: root/worker/types
diff options
context:
space:
mode:
authorDrew DeVault <sir@cmpwn.com>2018-02-01 18:42:03 -0500
committerDrew DeVault <sir@cmpwn.com>2018-02-01 18:42:03 -0500
commitd24e4712a45e03d79fa1ccb71d00c5b830d5a305 (patch)
tree61e2ba149d7b1197bdc5180200a6e087844131fe /worker/types
parentee73c419507ef74a78ddd6a3466b605cba140b68 (diff)
Reduce boilerplate in worker/UI
Diffstat (limited to 'worker/types')
-rw-r--r--worker/types/worker.go59
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
+}