Create a nano object, encapsulating a Socket along with an associated Dialer/Listener.

nano(
  protocol = c("bus", "pair", "push", "pull", "pub", "sub", "req", "rep", "surveyor",
    "respondent"),
  dial = NULL,
  listen = NULL,
  autostart = TRUE
)

Arguments

protocol

[default 'bus'] choose protocol - 'bus', 'pair', 'push', 'pull', 'pub', 'sub', 'req', 'rep', 'surveyor', or 'respondent' - see protocols.

dial

(optional) a URL to dial, specifying the transport and address as a character string e.g. 'inproc://anyvalue' or 'tcp://127.0.0.1:5555' (see transports).

listen

(optional) a URL to listen at, specifying the transport and address as a character string e.g. 'inproc://anyvalue' or 'tcp://127.0.0.1:5555' (see transports).

autostart

[default TRUE] whether to start the dialer/listener. Set to FALSE if you wish to set configuration options on the dialer/listener as it is not generally possible to change these once started.

Value

An nano object of class 'nanoObject'.

Details

This function encapsulates a Socket and a single Dialer and/or Listener.

The Socket may be accessed by $socket, and the Dialer or Listener by $dialer[[1]] or $listener[[1]] respectively.

The object's methods may be accessed by $ e.g. $send() or $recv(). These methods mirror their functional equivalents, with the same arguments and defaults, apart from that the first argument of the functional equivalent is mapped to the object's encapsulated socket and does not need to be supplied.

More complex network topologies may be created by binding further dialers or listeners using the object's $dial() and $listen() methods. The new dialer/listener will be attached to the object e.g. if the object already has a dialer, then at $dialer[[2]] etc.

Note that $dialer_setopt() and $listener_setopt() methods will be available once dialers/listeners are attached to the object. These methods apply settings to all dialers or listeners equally. To apply settings to individual dialers/listeners, access them directly via $dialer[[2]] or $listener[[2]] etc.

Examples

nano <- nano("bus", listen = "inproc://nanonext")
nano
#> < nano object >
#>  - socket id: 12 
#>  - state: opened 
#>  - protocol: bus 
#>  - listener:
#>     inproc://nanonext
nano$socket
#> < nanoSocket >
#>  - id: 12 
#>  - state: opened 
#>  - protocol: bus 
nano$listener[[1]]
#> < nanoListener >
#>  - id: 7 
#>  - socket: 12 
#>  - state: started 
#>  - url: inproc://nanonext 

nano$socket_setopt("ms", "send-timeout", 1000)

nano$listen(url = "inproc://nanonextgen")
nano$listener
#> [[1]]
#> < nanoListener >
#>  - id: 7 
#>  - socket: 12 
#>  - state: started 
#>  - url: inproc://nanonext 
#> 
#> [[2]]
#> < nanoListener >
#>  - id: 8 
#>  - socket: 12 
#>  - state: started 
#>  - url: inproc://nanonextgen 
#> 

nano1 <- nano("bus", dial = "inproc://nanonext")
nano$send("example test", mode = "raw")
#>  [1] 65 78 61 6d 70 6c 65 20 74 65 73 74 00
nano1$recv("character")
#> $raw
#>  [1] 65 78 61 6d 70 6c 65 20 74 65 73 74 00
#> 
#> $data
#> [1] "example test"
#> 

nano$close()
nano1$close()