38 lines
1.1 KiB
Python
Executable File
38 lines
1.1 KiB
Python
Executable File
"""
|
|
|
|
net/PrefixSocketServer
|
|
================
|
|
|
|
TODO:
|
|
* Add logging to broken pipe exceptions
|
|
|
|
"""
|
|
|
|
from abots.net import SocketServer
|
|
|
|
class PrefixSocketServer(SocketServer):
|
|
def __init__(self, host, port, listeners=5, buffer_size=4096,
|
|
secure=False, timeout=None, daemon=False):
|
|
args = host, port, listeners, buffer_size, secure, timeout, daemon
|
|
super().__init__(*args)
|
|
|
|
def _package_message(self, message, *args):
|
|
if len(args) > 0:
|
|
formatted = message.format(*args)
|
|
else:
|
|
formatted = message
|
|
packaged = pack(">I", len(formatted)) + formatted.encode()
|
|
return packaged
|
|
|
|
# Packages a message and sends it to socket
|
|
def send_message(self, uuid, message, *args):
|
|
sock = self._sock_from_uuid(uuid)
|
|
if sock is None:
|
|
return None
|
|
formatted = self._package_message(message)
|
|
try:
|
|
sock.send(formatted)
|
|
# The socket can either be broken or no longer open at all
|
|
except (BrokenPipeError, OSError) as e:
|
|
return
|