aboutsummaryrefslogtreecommitdiff
path: root/worker/types/worker.go
diff options
context:
space:
mode:
Diffstat (limited to 'worker/types/worker.go')
-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
+}