diff options
author | TinWoodman92 <chrhodgden@gmail.com> | 2023-06-13 19:58:23 -0500 |
---|---|---|
committer | TinWoodman92 <chrhodgden@gmail.com> | 2023-06-13 19:58:23 -0500 |
commit | 0fed584c13f4f60071a0b306b79ea69c4ea919a8 (patch) | |
tree | c42e7613a24545e3fdeda12fde4894afb3f406c3 /dialoguer/context_script.r | |
parent | 3097981b54b14bceaa9e7b52f569bafc42ba09fe (diff) |
Updated sockets connection to binary.
Diffstat (limited to 'dialoguer/context_script.r')
-rw-r--r-- | dialoguer/context_script.r | 66 |
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 |