aboutsummaryrefslogtreecommitdiff
path: root/dialoguer/context_script.r
diff options
context:
space:
mode:
authorTinWoodman92 <chrhodgden@gmail.com>2023-06-13 19:58:23 -0500
committerTinWoodman92 <chrhodgden@gmail.com>2023-06-13 19:58:23 -0500
commit0fed584c13f4f60071a0b306b79ea69c4ea919a8 (patch)
treec42e7613a24545e3fdeda12fde4894afb3f406c3 /dialoguer/context_script.r
parent3097981b54b14bceaa9e7b52f569bafc42ba09fe (diff)
Updated sockets connection to binary.
Diffstat (limited to 'dialoguer/context_script.r')
-rw-r--r--dialoguer/context_script.r66
1 files changed, 55 insertions, 11 deletions
diff --git a/dialoguer/context_script.r b/dialoguer/context_script.r
index ddc7dd9..56074a5 100644
--- a/dialoguer/context_script.r
+++ b/dialoguer/context_script.r
@@ -1,4 +1,4 @@
-HEADER <- 256
+HEADER <- 2048
PORT <- 6011
SERVER <- "localhost"
FORMAT <- "utf-8"
@@ -7,7 +7,8 @@ DISCONNECT_MESSAGE <- "!DISSCONNECT"
con <- socketConnection(
host = SERVER,
port = PORT,
- server = FALSE
+ server = FALSE,
+ open = "a+b"
)
display_msg <- function(msg) {
@@ -19,22 +20,63 @@ display_msg <- function(msg) {
)
}
-send <- function(conn, msg) {
- sendme <- paste(msg, strrep(" ", HEADER - nchar(msg)), sep = "")
- writeChar(sendme, conn)
+add_missing_bits <- function(bin_data, base = 8) {
+ missing_bits <- length(bin_data) %% base
+ if (missing_bits > 0) {
+ missing_bits <- rep(as.raw(00), times = base - missing_bits)
+ bin_data <- c(bin_data, missing_bits)
+ }
+ return(bin_data)
+}
+
+convert_from_binary <- function(bin_data, to_type) {
+ data <- NA
+ bin_data <- add_missing_bits(bin_data)
+ if (to_type == "character") {
+ data <- packBits(bin_data, "raw")
+ data <- rawToChar(data)
+ } else if (to_type == "integer") {
+ data <- packBits(bin_data, "raw")
+ data <- as.integer(data)
+ }
+ return(data)
+}
+
+convert_to_binary <- function(data) {
+ bin_data <- NA
+ if (is.character(data)) {
+ bin_data <- charToRaw(data)
+ bin_data <- rawToBits(bin_data)
+ } else if (is.integer(data)) {
+ bin_data <- as.raw(data)
+ bin_data <- rawToBits(bin_data)
+ }
+ return(bin_data)
+}
+
+send <- function(conn, data) {
+ writeBin(data, conn)
}
-recv <- function(conn) {
- suppressWarnings(msg <- trimws(readChar(conn, HEADER)))
- while (length(msg) == 0) {
- #cat('ALERT\n')
- suppressWarnings(msg <- trimws(readChar(conn, HEADER)))
+recv <- function(conn, silent = TRUE) {
+ if (silent) {
+ suppressWarnings(data <- readBin(conn, "raw", HEADER))
+ while (length(data) == 0) {
+ suppressWarnings(data <- readBin(conn, "raw", HEADER))
+ }
+ } else {
+ data <- readBin(conn, "raw", HEADER)
+ while (length(data) == 0) {
+ cat('ALERT\n')
+ data <- readBin(conn, "raw", HEADER)
+ }
}
- return(msg)
+ return(data)
}
#receive target file path
file_path <- recv(con)
+file_path <- convert_from_binary(file_path, "character")
#load target file
source(file_path)
@@ -49,8 +91,10 @@ while (msg != '!DISCONNECT') {
display_msg(msg)
val <- get(msg)
val <- as.character(val)
+ val <- convert_to_binary(val)
send(con, val)
msg <- recv(con)
+ msg <- convert_from_binary(msg, "character")
}
close(con) \ No newline at end of file