aboutsummaryrefslogtreecommitdiff
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
parent3097981b54b14bceaa9e7b52f569bafc42ba09fe (diff)
Updated sockets connection to binary.
-rw-r--r--dialoguer/__init__.py27
-rw-r--r--dialoguer/context_script.r66
2 files changed, 70 insertions, 23 deletions
diff --git a/dialoguer/__init__.py b/dialoguer/__init__.py
index 23dd8f2..2692167 100644
--- a/dialoguer/__init__.py
+++ b/dialoguer/__init__.py
@@ -2,13 +2,13 @@ import os
import subprocess
import threading
import socket
+from . import binary_conversion
-HEADER = 256
+HEADER = 2048
PORT = 6011
SERVER = 'localhost'
ADDR = (SERVER, PORT)
FORMAT = 'utf-8'
-DISCONNECT_MESSAGE = b'!DISSCONNECT'
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(ADDR)
@@ -44,28 +44,31 @@ class Dialogue:
self._connect.join()
self.send(self.file_path)
- msg = self.recv()
- self.active = (msg == b'TRUE')
+ data = self.recv()
+ data = binary_conversion.convert_from_binary(data, type('s'))
+ self.active = (data == 'TRUE')
def open(self, wait = True):
self._open = threading.Thread(target=self.launch_and_connect)
if wait: self._open.run()
else: self._open.start()
- def send(self, msg):
- data = bytes(msg, FORMAT)
- data += b' ' * (HEADER - len(data))
- self.conn.send(data)
+ def send(self, data):
+ bin_data = reversed(data)
+ bin_data = "".join(bin_data)
+ bin_data = binary_conversion.convert_to_binary(bin_data)
+ self.conn.send(bin_data)
def recv(self):
- msg = self.conn.recv(HEADER).strip()
- while msg == b'\x00':
- msg = self.conn.recv(HEADER).strip()
- return msg
+ data = self.conn.recv(HEADER)
+ while data == b'\x00':
+ data = self.conn.recv(HEADER)
+ return data
def import_variable(self, var_name):
self.send(var_name)
val = self.recv()
+ val = binary_conversion.convert_from_binary(val, type('s'))
return val
def evaluate_expression(self, expr):
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