User:Kevin Reid/User far proxy
From Erights
The basic idea here is that there ought to be a way for a user to interactively provide the behavior of a far ref: for general interactive use where a callback is wanted, for debugging eventual protocols, and for demonstrating how E works.
This ties directly into the interactive object manipulation ideas that are part of [[./E-AUI]] but I haven't implemented it in that framework yet.
This is a draft REPL-based implementation which I wrote July 26, 2008. I haven't checked whether it works. —Kevin Reid 09:03, 6 May 2010 (CDT)
The UI design is that notifications are printed to stdout with an index n, and the arguments and return-value resolver are obtained by verb[n], args[n], and reply[n].
var lastID := 0
def verbs := [].asMap().diverge()
def args := [].asMap().diverge()
def reply := [].asMap().diverge()
def make(label :String) {
return makeProxy(def handler {
to handleSendOnly(verb, args) {
def thisID := lastID += 1
stdout.println(`$label received $verb$args [$thisID]`)
verbs[thisID] := verb
args[thisID] := args
}
to handleSend(verb, args) {
handler.handleSendOnly(verb, args)
stdout.println(`Expecting a reply`)
def thisID := lastID # XXX kludge
reply[thisID] := def response
response
}
})
}

