svSocket-package
.?startSocketServer
.startSocketServer()
is renamed start_socket_server()
. Old names remain for backward compatibility, but they are deprecated.The Tcl client example in /etc now uses /usr/bin/tclsh.
{svHttp} package is added in suggests.
Code adapted to R 4.0.
Repository refreshed.
Document rewritten using Roxygen2.
Web site done with pkgdown.
Vignettes.
Switch to Github for development; use CI.
Added importFrom()
for base packages in NAMESPACE.
evalServer()
was not able to process correctly strings that contain double quotes. These are now escaped. Thanks to Adam Ryczkowski for the bug report.
/testCLI directory moved to /inst/testCLI.
An example is added that tests/demonstrates how to start, query and stop a SciViews socket server from within R.
evalServer()
now can pass objects that contain pointers as attributes (e.g., 'data.table' objects), but the pointers are set to NULL
on the client side (they are probably meaningless there). This may result in corrupted or malfunctioning objects, unless they can cope with such a situation, like 'data.table' object do.
Slightly reworked examples of ?evalServer and added a details section to explain which R objects cannot be transferred between R processes through evalServer().
An example is added to ?sendSocketClients
.
It now needs svMisc >= 0.9-68, and it uses SciViews:TempEnv
instead of TempEnv
to store data from clients and servers (stateful conditions).
evalServer()
leading to evaluation of a condition of length > 1 in an if()
construct in some case is corrected. Thanks to Xiaoqian Jiang.processSocket()
now uses the new version of captureAll()
from svMisc >= 0.9-62 with the split=
and echo=
arguments. Commands and results are now interwoven like in a normal console output.
The socket server now accepts and respond to 'HEAD' HTTP requests. It can process simple R commands in synchronous mode. This should be reserved to sense if a R server is running on a port, and which one is it (socket or http). It is also used to change config parameters like options(width = ...) in a synchronous way before running 'more serious' code asynchronously.
Callback mechanisms used by the server now moved to svKomodo package, so that it can also be used by svHttp.
processSocket()
no longer adds en empty line at the top of R commands (bug corrected).processSocket()
now calls parseText()
from svMisc >= 0.9-60 instead of Parse()
.
When Echo is TRUE
and we are not in hidden mode, results are echoed directly in the R console as they are available, and not any more at the end of the calculation.
A new type of connection is added: a 'sockclientconn' that allows to redirect output (append or write-only, for the moment) to a SciViews socket client. It is created by using socketClientConnection()
and has a specific summary()
method. It inherits from a 'sockconn' object and should behave similarly.
parSocket()
has a new argument, clientsocket=
, that allows to pass the Tcl name of the client's socket. This is required to use socketClientConnection()
by providing only the client's name (and thus, the required Tcl socket name is obtained through the property parSocket(....)$clientsocket
, if it was previously recorded). The default process function, processSocket()
is changed to record the Tcl socket in parSocket()
each time a client connects to the server and sends its first command through it.
startSocketServer()
: the Tcl/Tk callback function now calls a closure located in SciViews:TempEnv
(SocketServerProc
).svTaskCallbackManager()
added to allow callbacks to be executed after each (complete) R code send by a client to the server, as well as, any top-level task run at the R console.taskCallbacks
on non-hidden mode after code evaluation.evalServer()
slightly reworked.
sendSocketServer()
eliminated (superseded by evalServer()
).
evalServer()
.evalServer()
for R interprocess communication using this R socket server mechanism.Example added in processSocket()
, implementing a simple REPL.
A new function, sendSocketServer()
is added to send and evaluate commands from one R instance (client) to another one (a R socket server).
Correction in startSocketServer()
: the SocketServerProc
function was not protected against garbage collection. Consequently, the socket server stopped working at unpredictable events.
Correction of a bug preventing processSocket()
to display error messages. Instead, I got: Error in ngettext(1, "Error: ", domain = "R") : argument "msg2" is missing, with no default
.