Skip to content

Commit 18aa3dc

Browse files
committed
add additional interfaces for mirai dev
1 parent 778c92d commit 18aa3dc

File tree

10 files changed

+59
-43
lines changed

10 files changed

+59
-43
lines changed

DESCRIPTION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
Package: nanonext
22
Type: Package
33
Title: NNG (Nanomsg Next Gen) Lightweight Messaging Library
4-
Version: 0.2.0.9001
4+
Version: 0.2.0.9002
55
Description: R binding for NNG (Nanomsg Next Gen), a successor to ZeroMQ. NNG is
66
a socket library providing high-performance scalability protocols,
77
implementing a cross-platform standard for messaging and communications.

NAMESPACE

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ S3method(setopt,nanoListener)
2121
S3method(setopt,nanoSocket)
2222
S3method(start,nanoDialer)
2323
S3method(start,nanoListener)
24+
export(.mirai_scm)
2425
export(call_aio)
2526
export(context)
2627
export(dial)

NEWS.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# nanonext 0.2.0.9001 (development)
1+
# nanonext 0.2.0.9002 (development)
22

33
#### New Features
44

R/aio.R

Lines changed: 39 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -64,54 +64,52 @@
6464
#'
6565
call_aio <- function(aio, block = TRUE) {
6666

67-
if (length(.subset2(aio, "aio"))) {
67+
is.null(.subset2(aio, "aio")) && return(invisible(aio))
6868

69-
if (inherits(aio, "recvAio")) {
69+
if (inherits(aio, "recvAio")) {
7070

71-
if (missing(block) || isTRUE(block)) {
72-
res <- .Call(rnng_aio_wait_get_msg, .subset2(aio, "aio"))
73-
} else {
74-
res <- .Call(rnng_aio_get_msg, .subset2(aio, "aio"))
75-
missing(res) && return()
76-
}
77-
mode <- .subset2(aio, "callparams")[[1L]]
78-
keep.raw <- .subset2(aio, "callparams")[[2L]]
79-
if (keep.raw) aio[["raw"]] <- res
80-
is.integer(res) && {
81-
message(res, " : ", nng_error(res))
82-
return(invisible(aio))
83-
}
84-
on.exit(expr = {
85-
aio[["raw"]] <- res
86-
rm("aio", envir = aio)
87-
rm("callparams", envir = aio)
88-
return(invisible(aio))
89-
})
90-
data <- switch(mode,
91-
serial = unserialize(connection = res),
92-
character = (r <- readBin(con = res, what = mode, n = length(res)))[r != ""],
93-
raw = res,
94-
readBin(con = res, what = mode, n = length(res)))
95-
aio[["data"]] <- data
96-
on.exit()
71+
if (missing(block) || isTRUE(block)) {
72+
res <- .Call(rnng_aio_wait_get_msg, .subset2(aio, "aio"))
73+
} else {
74+
res <- .Call(rnng_aio_get_msg, .subset2(aio, "aio"))
75+
missing(res) && return()
76+
}
77+
mode <- .subset2(aio, "callparams")[[1L]]
78+
keep.raw <- .subset2(aio, "callparams")[[2L]]
79+
if (keep.raw) aio[["raw"]] <- res
80+
is.integer(res) && {
81+
message(res, " : ", nng_error(res))
82+
return(invisible(aio))
83+
}
84+
on.exit(expr = {
85+
aio[["raw"]] <- res
9786
rm("aio", envir = aio)
9887
rm("callparams", envir = aio)
88+
return(invisible(aio))
89+
})
90+
data <- switch(mode,
91+
serial = unserialize(connection = res),
92+
character = (r <- readBin(con = res, what = mode, n = length(res)))[r != ""],
93+
raw = res,
94+
readBin(con = res, what = mode, n = length(res)))
95+
aio[["data"]] <- data
96+
on.exit()
97+
rm("aio", envir = aio)
98+
rm("callparams", envir = aio)
9999

100-
} else if (inherits(aio, "sendAio")) {
100+
} else if (inherits(aio, "sendAio")) {
101101

102-
if (missing(block) || isTRUE(block)) {
103-
res <- .Call(rnng_aio_wait_result, .subset2(aio, "aio"))
104-
} else {
105-
res <- .Call(rnng_aio_result, .subset2(aio, "aio"))
106-
missing(res) && return()
107-
}
108-
aio[["result"]] <- res
109-
rm("aio", envir = aio)
110-
if (res) {
111-
message(res, " : ", nng_error(res))
112-
}
102+
if (missing(block) || isTRUE(block)) {
103+
res <- .Call(rnng_aio_wait_result, .subset2(aio, "aio"))
104+
} else {
105+
res <- .Call(rnng_aio_result, .subset2(aio, "aio"))
106+
missing(res) && return()
107+
}
108+
aio[["result"]] <- res
109+
rm("aio", envir = aio)
110+
if (res) {
111+
message(res, " : ", nng_error(res))
113112
}
114-
115113
}
116114

117115
invisible(aio)

R/context.R

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,7 @@ recv_ctx <- function(context,
152152
raw = res,
153153
readBin(con = res, what = mode, n = length(res)))
154154
on.exit()
155+
missing(data) && return(.Call(rnng_scm))
155156
if (missing(keep.raw) || isTRUE(keep.raw)) list(raw = res, data = data) else data
156157

157158
}

R/nanonext-package.R

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,3 +122,4 @@
122122
#'
123123
NULL
124124

125+
utils::globalVariables("eval_mirai")

R/utils.R

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,15 @@ is_nul_byte <- function(x) {
7070

7171
}
7272

73+
#' @export
74+
#'
75+
.mirai_scm <- function() {
76+
77+
identical(parent.env(parent.env(parent.frame())), environment(eval_mirai)) || return()
78+
.Call(rnng_scm)
79+
80+
}
81+
7382
#' ncurl
7483
#'
7584
#' nano cURL - a minimalist http(s) client.

src/init.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ static const R_CallMethodDef CallEntries[] = {
6262
{"rnng_listener_set_string", (DL_FUNC) &rnng_listener_set_string, 3},
6363
{"rnng_listener_set_uint64", (DL_FUNC) &rnng_listener_set_uint64, 3},
6464
{"rnng_listener_start", (DL_FUNC) &rnng_listener_start, 1},
65+
{"rnng_scm", (DL_FUNC) &rnng_scm, 0},
6566
{"rnng_ncurl", (DL_FUNC) &rnng_ncurl, 2},
6667
{"rnng_protocol_open", (DL_FUNC) &rnng_protocol_open, 1},
6768
{"rnng_recv", (DL_FUNC) &rnng_recv, 2},

src/nanonext.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ extern SEXP rnng_listener_set_size(SEXP, SEXP, SEXP);
5555
extern SEXP rnng_listener_set_string(SEXP, SEXP, SEXP);
5656
extern SEXP rnng_listener_set_uint64(SEXP, SEXP, SEXP);
5757
extern SEXP rnng_listener_start(SEXP);
58+
extern SEXP rnng_scm(void);
5859
extern SEXP rnng_ncurl(SEXP, SEXP);
5960
extern SEXP rnng_protocol_open(SEXP);
6061
extern SEXP rnng_recv(SEXP, SEXP);

src/utils.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,10 @@ SEXP rnng_version(void) {
3333

3434
}
3535

36+
SEXP rnng_scm() {
37+
return R_MissingArg;
38+
}
39+
3640
/* ncurl - minimalist http client ------------------------------------------- */
3741

3842
SEXP rnng_ncurl(SEXP http, SEXP args) {

0 commit comments

Comments
 (0)