diff options
-rw-r--r-- | dialoguer/__init__.py | 14 | ||||
-rw-r--r-- | dialoguer/binary_conversion.py | 61 | ||||
-rw-r--r-- | dialoguer/context_script.r | 74 |
3 files changed, 49 insertions, 100 deletions
diff --git a/dialoguer/__init__.py b/dialoguer/__init__.py index 476cde0..8c87089 100644 --- a/dialoguer/__init__.py +++ b/dialoguer/__init__.py @@ -65,8 +65,12 @@ class Dialogue: data_type_name = type(data) data_type_name = data_type_name.__name__ data_type_name = bin_conv(data_type_name) + print('data_type_name', data_type_name) self.conn.send(data_type_name) + recv_chk = self.recv(set_data_type=bool) + print('recv_chk', recv_chk) bin_data = bin_conv(data) + # bin_data = bytes(data, 'utf-8') self.conn.send(bin_data) # I still want to consolidate the recv_data_type and set_data_type args @@ -83,7 +87,6 @@ class Dialogue: data = self.conn.recv(HEADER) while data == b'\x00': data = self.conn.recv(HEADER) - data = bin_conv(data, data_type) return data @@ -96,21 +99,30 @@ class Dialogue: return val def evaluate_expression(self, method_name, *args, **kwargs): + + print('cmd_int', 2) self.send(2) + print('cmd_int', 2) recv_chk = self.recv(set_data_type=bool) + print('recv_chk', recv_chk) #send number of arguments self.send(len(args)) recv_chk = self.recv(set_data_type=bool) + print('recv_chk', recv_chk) #send number of keyword arguments self.send(len(kwargs)) recv_chk = self.recv(set_data_type=bool) + print('recv_chk', recv_chk) #send method name self.send(method_name) recv_chk = self.recv(set_data_type=bool) + print('recv_chk', recv_chk) #send arguments + #print('args', args) for arg in args: self.send(arg, True) recv_chk = self.recv(set_data_type=bool) + #print('recv_chk', recv_chk) #send keyword arguments for kw in kwargs: self.send(kw) diff --git a/dialoguer/binary_conversion.py b/dialoguer/binary_conversion.py index 9bdef6c..73400d6 100644 --- a/dialoguer/binary_conversion.py +++ b/dialoguer/binary_conversion.py @@ -2,55 +2,28 @@ def bin_conv(data, data_type = None): conv_data = None #convert to binary if type(data) == str and data_type == None: - conv_data = reversed(data) - conv_data = ''.join(conv_data) - n = '' - for s in conv_data: - m = ord(s) - m = hex(m) - n += m.lstrip('0x') - conv_data = n - conv_data = int(conv_data, 16) - conv_data = bin(conv_data) - conv_data = conv_data.replace('b', '') - conv_data = ''.join(reversed(conv_data)) - conv_data = conv_data.zfill(8) - n = b'' - for b in conv_data: - m = int(b) - m = chr(m) - m = bytes(m, 'utf-8') - n += m - conv_data = n + conv_data = bytes(data, 'utf-8') elif type(data) == int and data_type == None: - conv_data = bin(data) - conv_data = conv_data.lstrip('0b') - conv_data = conv_data.zfill(8) - conv_data = ''.join(reversed(conv_data)) - n = b'' - for b in conv_data: - m = int(b) - m = chr(m) - m = bytes(m, 'utf-8') - n += m - conv_data = n + conv_data = data.to_bytes(32, 'little') + #print(conv_data) + # conv_data = bin(data) + # conv_data = conv_data.lstrip('0b') + # conv_data = conv_data.zfill(8) + # conv_data = ''.join(reversed(conv_data)) + # n = b'' + # for b in conv_data: + # m = int(b) + # m = chr(m) + # m = bytes(m, 'utf-8') + # n += m + # conv_data = n #convert from binary elif type(data) == bytes and data_type == str: - n = '' - for b in data: n = f'{b}{n}' - conv_data = n - conv_data = int(conv_data, 2) - conv_data = hex(conv_data) - conv_data = conv_data.lstrip('0x') - conv_data = bytearray.fromhex(conv_data) - conv_data = conv_data.decode() - conv_data = ''.join(reversed(conv_data)) + conv_data = data.decode() + conv_data = conv_data.rstrip('\x00') elif type(data) == bytes and data_type == int: - n = '' - for b in data: n = f'{b}{n}' - conv_data = n - conv_data = int(conv_data, 2) + conv_data = int.from_bytes(data, 'little') elif type(data) == bytes and data_type == bool: conv_data = bool(data[0]) diff --git a/dialoguer/context_script.r b/dialoguer/context_script.r index 712727c..50471ef 100644 --- a/dialoguer/context_script.r +++ b/dialoguer/context_script.r @@ -25,74 +25,31 @@ display_msg <- function(...) { ) } -add_missing_bits <- function(bits, base = 8) { - missing_bits <- length(bits) %% base - if (missing_bits > 0) { - missing_bits <- rep(as.raw(00), times = base - missing_bits) - bits <- c(bits, missing_bits) - } - return(bits) -} - -bin_conv <- function(data, data_type_name = NA) { - conv_data <- NA - # convert to binary - if (is.character(data) && is.na(data_type_name)) { - conv_data <- charToRaw(data) - conv_data <- rawToBits(conv_data) - } else if (is.integer(data) && is.na(data_type_name)) { - conv_data <- as.raw(data) - conv_data <- rawToBits(conv_data) - } else if (is.logical(data) && is.na(data_type_name)) { - conv_data <- as.raw(data) - conv_data <- rawToBits(conv_data) - } else if (is.double(data) && is.na(data_type_name)) { - conv_data <- as.raw(data) - conv_data <- rawToBits(conv_data) - # convert from binary - } else if (is.raw(data) && data_type_name == "character") { - conv_data <- add_missing_bits(data) - conv_data <- packBits(conv_data, "raw") - conv_data <- rawToChar(conv_data) - } else if (is.raw(data) && data_type_name == "integer") { - conv_data <- add_missing_bits(data) - conv_data <- packBits(conv_data, "raw") - conv_data <- as.integer(conv_data) - } else if (is.raw(data) && data_type_name == "logical") { - conv_data <- add_missing_bits(data) - conv_data <- packBits(conv_data, "raw") - conv_data <- as.logical(conv_data) - } else if (is.raw(data) && data_type_name == "double") { - conv_data <- add_missing_bits(data) - conv_data <- packBits(conv_data, "raw") - conv_data <- as.double(conv_data) - } - return(conv_data) -} - # 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) - data_type_name <- bin_conv(data_type_name) writeBin(data_type_name, conn) } - bin_data <- bin_conv(data) - writeBin(bin_data, conn) + 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_name <- readBin(conn, "raw", HEADER)) - while (length(data_type_name) == 0) { - suppressWarnings(data_type_name <- readBin(conn, "raw", HEADER)) + suppressWarnings(data_type_bin <- readBin(conn, "raw", HEADER)) + while (length(data_type_bin) == 0) { + suppressWarnings(data_type_bin <- readBin(conn, "raw", HEADER)) } - data_type_name <- bin_conv(data_type_name, "character") - data_type_name <- data_type_vect[data_type_name] + display_msg('data_type_bin', data_type_bin) + data_type_name <- readBin(data_type_bin, "character") + display_msg('data_type_name', data_type_name, '-') + data_type <- data_type_vect[data_type_name] + display_msg('data_type', data_type) + send(con, TRUE) } else { - data_type_name <- set_data_type + data_type <- set_data_type } suppressWarnings(data <- readBin(conn, "raw", HEADER)) @@ -100,7 +57,7 @@ recv <- function(conn, recv_data_type = FALSE, set_data_type = "character") { suppressWarnings(data <- readBin(conn, "raw", HEADER)) } - data <- bin_conv(data, data_type_name) + data <- readBin(data, data_type) return(data) } @@ -133,18 +90,24 @@ import_variable <- function() { evaluate_expression <- function() { arg_count <- recv(con, FALSE, "integer") + display_msg('arg_count', arg_count) send(con, TRUE) kwarg_count <- recv(con, FALSE, "integer") send(con, TRUE) method_name <- recv(con, FALSE, "character") + display_msg('method_name', method_name) send(con, TRUE) args <- list() + #display_msg('args', args) if (arg_count > 0) { for (i in 1:arg_count) { + #display_msg('args', args) args <- c(args, recv(con, TRUE)) + args[1] send(con, TRUE) } } + #display_msg('args', args) kwargs <- list() if (kwarg_count > 0) { keys <- c() @@ -172,6 +135,7 @@ send(con, TRUE) cmd_int <- -1 while (cmd_int != 0) { cmd_int <- recv(con, FALSE, "integer") + display_msg('cmd_int', cmd_int) if (cmd_int == 1){ send(con, TRUE) import_variable() |