about summary refs log tree commit diff stats
path: root/worker
diff options
context:
space:
mode:
authorDrew DeVault <sir@cmpwn.com>2019-06-02 13:20:02 -0400
committerDrew DeVault <sir@cmpwn.com>2019-06-02 13:20:02 -0400
commita81467dda9d577be706a1875451a3b031840639d (patch)
treedce38c7c37523ab247f91533ec7c178c1a95da0f /worker
parent7d1770754ff432b0c6f153c066e4c749683b563f (diff)
downloadaerc-a81467dda9d577be706a1875451a3b031840639d.tar.gz
Remove worker callbacks when Done is received
Diffstat (limited to 'worker')
-rw-r--r--worker/types/messages.go2
-rw-r--r--worker/types/worker.go16
2 files changed, 13 insertions, 5 deletions
diff --git a/worker/types/messages.go b/worker/types/messages.go
index 0169e05..4e46cbf 100644
--- a/worker/types/messages.go
+++ b/worker/types/messages.go
@@ -34,7 +34,7 @@ func (m Message) getId() int64 {
 	return m.id
 }
 
-func (m Message) setId(id int64) {
+func (m *Message) setId(id int64) {
 	m.id = id
 }
 
diff --git a/worker/types/worker.go b/worker/types/worker.go
index 38140e0..85c19f1 100644
--- a/worker/types/worker.go
+++ b/worker/types/worker.go
@@ -72,13 +72,17 @@ func (worker *Worker) PostMessage(msg WorkerMessage,
 
 func (worker *Worker) ProcessMessage(msg WorkerMessage) WorkerMessage {
 	if resp := msg.InResponseTo(); resp != nil {
-		worker.Logger.Printf("(ui)<= %T:%T\n", msg, resp)
+		worker.Logger.Printf("(ui)<= %T(%d):%T(%d)\n",
+			msg, msg.getId(), resp, resp.getId())
 	} else {
-		worker.Logger.Printf("(ui)<= %T\n", msg)
+		worker.Logger.Printf("(ui)<= %T(%d)\n", msg, msg.getId())
 	}
 	if inResponseTo := msg.InResponseTo(); inResponseTo != nil {
 		if f, ok := worker.actionCallbacks[inResponseTo.getId()]; ok {
 			f(msg)
+			if _, ok := msg.(*Done); ok {
+				delete(worker.actionCallbacks, inResponseTo.getId())
+			}
 		}
 	}
 	return msg
@@ -86,13 +90,17 @@ func (worker *Worker) ProcessMessage(msg WorkerMessage) WorkerMessage {
 
 func (worker *Worker) ProcessAction(msg WorkerMessage) WorkerMessage {
 	if resp := msg.InResponseTo(); resp != nil {
-		worker.Logger.Printf("<-(ui) %T:%T\n", msg, resp)
+		worker.Logger.Printf("<-(ui) %T(%d):%T(%d)\n",
+			msg, msg.getId(), resp, resp.getId())
 	} else {
-		worker.Logger.Printf("<-(ui) %T\n", msg)
+		worker.Logger.Printf("<-(ui) %T(%d)\n", msg, msg.getId())
 	}
 	if inResponseTo := msg.InResponseTo(); inResponseTo != nil {
 		if f, ok := worker.messageCallbacks[inResponseTo.getId()]; ok {
 			f(msg)
+			if _, ok := msg.(*Done); ok {
+				delete(worker.messageCallbacks, inResponseTo.getId())
+			}
 		}
 	}
 	return msg