From fd183e8bf78b68c9007961de5c33f764758e0235 Mon Sep 17 00:00:00 2001 From: Pietro Gagliardi Date: Sun, 6 Jul 2014 21:42:11 -0400 Subject: [PATCH] Added the new common uitask code to the redo. --- redo/uitask.go | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 redo/uitask.go diff --git a/redo/uitask.go b/redo/uitask.go new file mode 100644 index 0000000..c29470a --- /dev/null +++ b/redo/uitask.go @@ -0,0 +1,40 @@ +// 6 july 2014 + +package ui + +// TODO Go, Start, Stop + +// This is the ui main loop. +// It is spawned by Go as a goroutine. +func uitask() { + for { + select { + case req := <-Do: + // TODO foreign event + issue(req) + case <-stall: // wait for event to finish + <-stall // see below for information + } + } +} + +// At each event, this is pulsed twice: once when the event begins, and once when the event ends. +// Do is not processed in between. +var stall = make(chan struct{}) + +// This is the common code for running an event. +// TODO +// - define event +// - figure out how to return values from event handlers +func doevent(e event) { + stall <- struct{}{} // enter event handler + c := make(Doer) + go func() { + e.do(c) + close(c) + }() + for req := range c { + issue(req) + } + stall <- struct{}{} // leave event handler +}