Skip to content

Commit

Permalink
Version 1.0 release
Browse files Browse the repository at this point in the history
  • Loading branch information
0xJeremy committed Jun 27, 2020
1 parent 9a33bbe commit e88052c
Show file tree
Hide file tree
Showing 17 changed files with 1,385 additions and 1,300 deletions.
2 changes: 1 addition & 1 deletion nodejs/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "socket.engine",
"version": "0.3.0",
"version": "1.0.0",
"description": "A universal communication engine",
"main": "index.js",
"scripts": {
Expand Down
9 changes: 5 additions & 4 deletions python/build/lib/socketengine/__init__.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
from .client import client as _client
from .host import host as _host
from .hub import connection as _connection
from .hub import hub as _hub

from .transport import Transport as _Transport
from .hub import Hub as _Hub

client = _client
host = _host

connection = _connection
hub = _hub
Transport = _Transport
Hub = _Hub
187 changes: 94 additions & 93 deletions python/build/lib/socketengine/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,97 +16,98 @@
### CLIENT CLASS ###
####################


class client:
def __init__(self, addr=ADDR, timeout=TIMEOUT, port=PORT, size=SIZE, open=OPEN):
self.addr = addr
self.port = port
self.canWrite = True
self.channels = {}
self.timeout = timeout
self.size = size
self.lock = Lock()
self.opened = False
self.stopped = False
if open:
self.open()

def set_timeout(self, time):
self.timeout = time

def open(self):
while True:
try:
self.socket = generateSocket(self.timeout)
self.socket.connect((self.addr, self.port))
break
except OSError as e:
if type(e) is ConnectionRefusedError:
continue
raise RuntimeError("Socket address in use: {}".format(e))
return
except socket.timeout:
continue
self.opened = True

def start(self):
Thread(target=self.run, args=()).start()
return self

def run(self):
tmp = ''
while True:
if self.stopped:
self.socket.close()
return

try:
tmp += self.socket.recv(self.size).decode()
except socket.timeout:
continue
except OSError:
self.close()

if tmp != '' and tmp != '\n':
data = tmp.split('\n')
for i in range(len(data)):
try:
msg = jsonToDict(data[i])
self.channels[msg['type']] = msg['data']
if(msg['type'] == ACK):
self.canWrite = True
tmp = ''
except JSONDecodeError:
tmp = ''.join(data[i:])
break

def get(self, channel):
with self.lock:
if channel in self.channels.keys():
return self.channels[channel]
return None

def writeLock(self, channel, data):
with self.lock:
self.write(channel, data)
return self

def write(self, channel, data):
msg = {'type': channel, 'data': data}
self.socket.sendall(dictToJson(msg).encode() + NEWLINE)
return self

def writeImgLock(self, data):
with self.lock:
self.writeImg(data)
return self

def writeImg(self, data):
if self.canWrite:
self.canWrite = False
msg = IMG_MSG_S + encodeImg(data) + IMG_MSG_E
self.socket.sendall(msg + NEWLINE)
return self

def close(self):
self.opened = False
self.stopped = True
def __init__(self, addr=ADDR, timeout=TIMEOUT, port=PORT, size=SIZE, open=OPEN):
self.addr = addr
self.port = port
self.canWrite = True
self.channels = {}
self.timeout = timeout
self.size = size
self.lock = Lock()
self.opened = False
self.stopped = False
if open:
self.open()

def set_timeout(self, time):
self.timeout = time

def open(self):
while True:
try:
self.socket = generateSocket(self.timeout)
self.socket.connect((self.addr, self.port))
break
except OSError as e:
if type(e) is ConnectionRefusedError:
continue
raise RuntimeError("Socket address in use: {}".format(e))
return
except socket.timeout:
continue
self.opened = True

def start(self):
Thread(target=self.run, args=()).start()
return self

def run(self):
tmp = ""
while True:
if self.stopped:
self.socket.close()
return

try:
tmp += self.socket.recv(self.size).decode()
except socket.timeout:
continue
except OSError:
self.close()

if tmp != "" and tmp != "\n":
data = tmp.split("\n")
for i in range(len(data)):
try:
msg = jsonToDict(data[i])
self.channels[msg["type"]] = msg["data"]
if msg["type"] == ACK:
self.canWrite = True
tmp = ""
except JSONDecodeError:
tmp = "".join(data[i:])
break

def get(self, channel):
with self.lock:
if channel in self.channels.keys():
return self.channels[channel]
return None

def writeLock(self, channel, data):
with self.lock:
self.write(channel, data)
return self

def write(self, channel, data):
msg = {"type": channel, "data": data}
self.socket.sendall(dictToJson(msg).encode() + NEWLINE)
return self

def writeImgLock(self, data):
with self.lock:
self.writeImg(data)
return self

def writeImg(self, data):
if self.canWrite:
self.canWrite = False
msg = IMG_MSG_S + encodeImg(data) + IMG_MSG_E
self.socket.sendall(msg + NEWLINE)
return self

def close(self):
self.opened = False
self.stopped = True
17 changes: 11 additions & 6 deletions python/build/lib/socketengine/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,19 @@
import base64
import numpy as np


def encodeImg(img):
return base64.b64encode(cv2.imencode('.png', img)[1])
return base64.b64encode(cv2.imencode(".png", img)[1])


def decodeImg(img):
return cv2.imdecode(np.fromstring(base64.b64decode(img), dtype=np.uint8), cv2.IMREAD_ANYCOLOR)
return cv2.imdecode(
np.fromstring(base64.b64decode(img), dtype=np.uint8), cv2.IMREAD_ANYCOLOR
)


def generateSocket(timeout):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(timeout)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
return s
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(timeout)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
return s
26 changes: 13 additions & 13 deletions python/build/lib/socketengine/constants.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,29 +2,29 @@
### MESSAGE CONSTANTS ###
#########################

NEWLINE = '\n'.encode()
TYPE = 'type'
DATA = 'data'
IMAGE = '__image'
NEWLINE = "\n".encode()
TYPE = "type"
DATA = "data"
IMAGE = "__image"
IMG_MSG_S = '{"type": "__image", "data": "'.encode()
IMG_MSG_E = '"}'.encode()

########################
### SOCKET CONSTANTS ###
########################

ADDR = '127.0.0.1'
PORT = 8080
TIMEOUT = 2
SIZE = 256
OPEN = True
ADDR = "127.0.0.1"
PORT = 8080
TIMEOUT = 2
SIZE = 256
OPEN = True
MAX_RETRIES = 99

####################
### STATUS TYPES ###
####################

STATUS = '__status'
CLOSING = '__closing'
ACK = '__ack'
NAME_CONN = '__name_conn'
STATUS = "__status"
CLOSING = "__closing"
ACK = "__ack"
NAME_CONN = "__name_conn"
Loading

0 comments on commit e88052c

Please sign in to comment.