[Remoterengine-devel] callbacks on RemoteREngine and server side console

Romain Francois romain.francois at dbmail.com
Mon Aug 24 12:38:52 CEST 2009


On 08/24/2009 11:16 AM, Romain Francois wrote:
>
> Hello,
>
> I've finally enabled main loop callbacks on the RemoteREngine so that R
> read eval print loop (REPL) callbacks are sent to interested parties.
>
> == callbacks ==
>
> Because of rmi, I could not have this as blocking calls, so it is done
> by wrapping the information in a RCallback object and sending this
> object to callback listeners, which are then supposed to handle it
> (asynchronously).
>
> The RCallback has a needsResponse method that indicates if this callback
> needs a response (at the moment only the ChooseFileCallback callback
> needs a response). When the callback needs a response, the client is
> supposed to call the sendResponse method (responses are associated with
> the callback they originated from by a simple id mechanism).
>
> The server will keep a reference to callbacks for which it waits for a
> response and act accordingly the first time it receives a response for a
> given callback. it will also send another callback to indicate that no
> further response is needed.
>
> ReadConsoleCallbacks are handled separately at the moment, clients call
> the sendToConsole method, this adds a command to the queue of commands
> that feed the REPL. The REPL is sent a command as soon as the queue is
> not empty. Maybe later we can add the ability to remove queued commands,
> etc ...
>
> == server side console ==
>
> when you start the server, at the moment you get a fairly simple console
> that allows you to cleanly shut the server: it lets the clients know
> about it, it unbinds the server from the rmiregistry and finally shuts
> the jvm.
>
> I'd like to turn this console into an actual R console so that we can
> type commands into the REPL from the server side. For that, the
> ConsoleThread implements CallbackListener (dummy implementation atm).
>
> The problem I have is that the server side console is now implemented
> with a BufferedRead( InputStreamReader( System.in) ) and that the
> readLine method blocks which makes it difficult to implement the console.

It seems java.nio might help:
http://stackoverflow.com/questions/804951/is-it-possible-to-read-from-a-java-inputstream-with-a-timeout

I'll experiment with this.


> Also there are more capable console readers available such as jline or
> the gnu readline bindings for java or we could make a simple swing
> widget on the server side.
>
> What I probably need to do is write an interface for what the console is
> supposed to do, provide a default implementation that needs only java
> (no other libraries) and add the possibility to plug another
> implementation (jline,...) so to get more capable readline capabilities
> (such as completions, command history, ...)
>
> Anyone willing to help on this ?
>
 >
> Romain
>
> http://jline.sourceforge.net/
> http://java-readline.sourceforge.net/
>


-- 
Romain Francois
Professional R Enthusiast
+33(0) 6 28 91 30 30
http://romainfrancois.blog.free.fr
|- http://tr.im/w33B : Completion for java objects
|- http://tr.im/vzip : Code Snippet : List of CRAN packages
`- http://tr.im/vsK1 : R parser package on CRAN



More information about the Remoterengine-devel mailing list