forked from rc/aircox
- Writes tests for aircox streamer application; - Add test utilities in aircox Co-authored-by: bkfox <thomas bkfox net> Reviewed-on: rc/aircox#110
This commit is contained in:
@ -12,6 +12,8 @@ class Connector:
|
||||
Received data can be parsed from list of `key=value` or JSON.
|
||||
"""
|
||||
|
||||
socket_class = socket.socket
|
||||
"""Socket class to instanciate on open."""
|
||||
socket = None
|
||||
"""The socket."""
|
||||
address = None
|
||||
@ -26,27 +28,45 @@ class Connector:
|
||||
if address:
|
||||
self.address = address
|
||||
|
||||
def __enter__(self):
|
||||
r = self.open()
|
||||
if r == -1:
|
||||
raise RuntimeError("can not open socket.")
|
||||
return self
|
||||
|
||||
def __exit__(self):
|
||||
self.close()
|
||||
|
||||
def open(self):
|
||||
"""Open connection.
|
||||
|
||||
:return: 0 (success), 1 (already opened), -1 (failure)
|
||||
"""
|
||||
if self.is_open:
|
||||
return
|
||||
return 1
|
||||
|
||||
family = (
|
||||
socket.AF_UNIX if isinstance(self.address, str) else socket.AF_INET
|
||||
)
|
||||
try:
|
||||
self.socket = socket.socket(family, socket.SOCK_STREAM)
|
||||
self.socket = self.socket_class(family, socket.SOCK_STREAM)
|
||||
self.socket.connect(self.address)
|
||||
return 0
|
||||
except Exception:
|
||||
import traceback
|
||||
|
||||
traceback.print_exc()
|
||||
self.close()
|
||||
return -1
|
||||
|
||||
def close(self):
|
||||
self.socket.close()
|
||||
self.socket = None
|
||||
if self.is_open:
|
||||
self.socket.close()
|
||||
self.socket = None
|
||||
|
||||
# FIXME: return None on failed
|
||||
def send(self, *data, try_count=1, parse=False, parse_json=False):
|
||||
if self.open():
|
||||
if self.open() == -1:
|
||||
return None
|
||||
|
||||
data = bytes("".join([str(d) for d in data]) + "\n", encoding="utf-8")
|
||||
|
Reference in New Issue
Block a user