From f6bbfe5bcdbe2a29a8180e3d3fdaa55cddbc8f99 Mon Sep 17 00:00:00 2001 From: TinWoodman92 Date: Fri, 7 Jul 2023 19:25:39 -0500 Subject: Added save environment test. --- dialoguer/context_script.r | 150 --------------------------------------------- dialoguer/dialoguer.r | 150 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 150 insertions(+), 150 deletions(-) delete mode 100644 dialoguer/context_script.r create mode 100644 dialoguer/dialoguer.r (limited to 'dialoguer') diff --git a/dialoguer/context_script.r b/dialoguer/context_script.r deleted file mode 100644 index 32a0149..0000000 --- a/dialoguer/context_script.r +++ /dev/null @@ -1,150 +0,0 @@ -HEADER <- 2048 -PORT <- 6011 -SERVER <- "localhost" -FORMAT <- "utf-8" -DISCONNECT_MESSAGE <- "!DISSCONNECT" -UUID <- commandArgs(trailingOnly = TRUE)[1] -TARGET_FILE <- commandArgs(trailingOnly = TRUE)[2] - -data_type_vect <- c( - character = "character", - str = "character", - integer = "integer", - int = "integer", - double = "double", - float = "double", - logical = "logical", - bool = "logical" -) - -display_msg <- function(...) { - cat("\033[94m") - cat( - ..., - end = "\033[0m\n" - ) -} - -# may not need to pass connection if it will only be 1 per dialogue -send <- function(conn, data, send_data_type = FALSE) { - if (send_data_type) { - data_type_name <- typeof(data) - writeBin(data_type_name, conn) - recv_chk <- recv(conn, set_data_type = 'logical') - } - writeBin(data, conn) -} - -# may not need to pass connection if it will only be 1 per dialogue -# I still want to consolidate the recv_data_type and set_data_type args -recv <- function(conn, recv_data_type = FALSE, set_data_type = "character") { - if (recv_data_type) { - suppressWarnings(data_type <- readBin(conn, "raw", HEADER)) - while (length(data_type) == 0) { - suppressWarnings(data_type <- readBin(conn, "raw", HEADER)) - } - data_type <- readBin(data_type, "character") - data_type <- data_type_vect[data_type] - send(con, TRUE) - } else { - data_type <- set_data_type - } - - suppressWarnings(data <- readBin(conn, "raw", HEADER)) - while (length(data) == 0) { - suppressWarnings(data <- readBin(conn, "raw", HEADER)) - } - - data <- readBin(data, data_type) - - return(data) -} - -find_connection <- function() { - connected <- FALSE - while (!connected) { - con <- socketConnection( - host = SERVER, - port = PORT, - server = FALSE, - open = "a+b" - ) - - send(con, UUID) - uuid_chk <- recv(con) - connected <- (UUID == uuid_chk) - if (!connected) { - close(con) - } - } - return(con) -} - -import_variable <- function() { - var_name <- recv(con, FALSE, "character") - var_val <- get(var_name) - send(con, var_val, TRUE) -} - -assign_variable <- function() { - var_name <- recv(con, FALSE, "character") - send(con, TRUE) - var_val <- recv(con, TRUE) - send(con, TRUE) - assign(var_name, var_val, envir = globalenv()) -} - -evaluate_expression <- function() { - arg_count <- recv(con, FALSE, "integer") - send(con, TRUE) - kwarg_count <- recv(con, FALSE, "integer") - send(con, TRUE) - method_name <- recv(con, FALSE, "character") - send(con, TRUE) - args <- list() - if (arg_count > 0) { - for (i in 1:arg_count) { - args <- c(args, recv(con, TRUE)) - send(con, TRUE) - } - } - kwargs <- list() - if (kwarg_count > 0) { - keys <- c() - vals <- list() - for (i in 1:kwarg_count) { - keys <- c(keys, recv(con)) - send(con, TRUE) - vals <- c(vals, recv(con, TRUE)) - send(con, TRUE) - } - kwargs <- setNames(vals, keys) - } - args <- c(args, kwargs) - result <- do.call(method_name, args) - send(con, result, TRUE) -} - -con <- find_connection() - -#load target file -source(TARGET_FILE) - -send(con, TRUE) - -cmd_int <- -1 -while (cmd_int != 0) { - cmd_int <- recv(con, FALSE, "integer") - if (cmd_int == 1){ - send(con, TRUE) - import_variable() - } else if (cmd_int == 2) { - send(con, TRUE) - evaluate_expression() - } else if (cmd_int == 3) { - send(con, TRUE) - assign_variable() - } -} - -close(con) \ No newline at end of file diff --git a/dialoguer/dialoguer.r b/dialoguer/dialoguer.r new file mode 100644 index 0000000..32a0149 --- /dev/null +++ b/dialoguer/dialoguer.r @@ -0,0 +1,150 @@ +HEADER <- 2048 +PORT <- 6011 +SERVER <- "localhost" +FORMAT <- "utf-8" +DISCONNECT_MESSAGE <- "!DISSCONNECT" +UUID <- commandArgs(trailingOnly = TRUE)[1] +TARGET_FILE <- commandArgs(trailingOnly = TRUE)[2] + +data_type_vect <- c( + character = "character", + str = "character", + integer = "integer", + int = "integer", + double = "double", + float = "double", + logical = "logical", + bool = "logical" +) + +display_msg <- function(...) { + cat("\033[94m") + cat( + ..., + end = "\033[0m\n" + ) +} + +# may not need to pass connection if it will only be 1 per dialogue +send <- function(conn, data, send_data_type = FALSE) { + if (send_data_type) { + data_type_name <- typeof(data) + writeBin(data_type_name, conn) + recv_chk <- recv(conn, set_data_type = 'logical') + } + writeBin(data, conn) +} + +# may not need to pass connection if it will only be 1 per dialogue +# I still want to consolidate the recv_data_type and set_data_type args +recv <- function(conn, recv_data_type = FALSE, set_data_type = "character") { + if (recv_data_type) { + suppressWarnings(data_type <- readBin(conn, "raw", HEADER)) + while (length(data_type) == 0) { + suppressWarnings(data_type <- readBin(conn, "raw", HEADER)) + } + data_type <- readBin(data_type, "character") + data_type <- data_type_vect[data_type] + send(con, TRUE) + } else { + data_type <- set_data_type + } + + suppressWarnings(data <- readBin(conn, "raw", HEADER)) + while (length(data) == 0) { + suppressWarnings(data <- readBin(conn, "raw", HEADER)) + } + + data <- readBin(data, data_type) + + return(data) +} + +find_connection <- function() { + connected <- FALSE + while (!connected) { + con <- socketConnection( + host = SERVER, + port = PORT, + server = FALSE, + open = "a+b" + ) + + send(con, UUID) + uuid_chk <- recv(con) + connected <- (UUID == uuid_chk) + if (!connected) { + close(con) + } + } + return(con) +} + +import_variable <- function() { + var_name <- recv(con, FALSE, "character") + var_val <- get(var_name) + send(con, var_val, TRUE) +} + +assign_variable <- function() { + var_name <- recv(con, FALSE, "character") + send(con, TRUE) + var_val <- recv(con, TRUE) + send(con, TRUE) + assign(var_name, var_val, envir = globalenv()) +} + +evaluate_expression <- function() { + arg_count <- recv(con, FALSE, "integer") + send(con, TRUE) + kwarg_count <- recv(con, FALSE, "integer") + send(con, TRUE) + method_name <- recv(con, FALSE, "character") + send(con, TRUE) + args <- list() + if (arg_count > 0) { + for (i in 1:arg_count) { + args <- c(args, recv(con, TRUE)) + send(con, TRUE) + } + } + kwargs <- list() + if (kwarg_count > 0) { + keys <- c() + vals <- list() + for (i in 1:kwarg_count) { + keys <- c(keys, recv(con)) + send(con, TRUE) + vals <- c(vals, recv(con, TRUE)) + send(con, TRUE) + } + kwargs <- setNames(vals, keys) + } + args <- c(args, kwargs) + result <- do.call(method_name, args) + send(con, result, TRUE) +} + +con <- find_connection() + +#load target file +source(TARGET_FILE) + +send(con, TRUE) + +cmd_int <- -1 +while (cmd_int != 0) { + cmd_int <- recv(con, FALSE, "integer") + if (cmd_int == 1){ + send(con, TRUE) + import_variable() + } else if (cmd_int == 2) { + send(con, TRUE) + evaluate_expression() + } else if (cmd_int == 3) { + send(con, TRUE) + assign_variable() + } +} + +close(con) \ No newline at end of file -- cgit v1.2.3