|
@@ -2,23 +2,72 @@ import asyncio
|
|
|
import logging
|
|
|
|
|
|
|
|
|
-async def read_input_socket():
|
|
|
- return
|
|
|
+class Server:
|
|
|
+ def __init__(self, host='localhost', input_port=None, output_port=None):
|
|
|
+ self._host = host
|
|
|
+ self._input_port = input_port
|
|
|
+ self._output_port = output_port
|
|
|
+ self._reader = None
|
|
|
+ self._writer = None
|
|
|
+ self._stopping = False
|
|
|
+ self.buffer = [] # Shared list
|
|
|
|
|
|
+ @property
|
|
|
+ def host(self):
|
|
|
+ return self._host
|
|
|
|
|
|
-async def write_on_output_socket():
|
|
|
- return
|
|
|
+ @property
|
|
|
+ def input_port(self):
|
|
|
+ return self._input_port
|
|
|
+
|
|
|
+ @property
|
|
|
+ def output_port(self):
|
|
|
+ return self._output_port
|
|
|
+
|
|
|
+ @property
|
|
|
+ def reader(self) -> asyncio.StreamReader:
|
|
|
+ return self._reader
|
|
|
+
|
|
|
+ @property
|
|
|
+ def writer(self) -> asyncio.StreamReader:
|
|
|
+ return self._writer
|
|
|
+
|
|
|
+ @property
|
|
|
+ def stopping(self) -> bool:
|
|
|
+ return self._stopping
|
|
|
+
|
|
|
+ async def setup_reader(self):
|
|
|
+ reader, _ = await asyncio.open_connection(self.host, self.input_port)
|
|
|
+ self._reader = reader
|
|
|
+
|
|
|
+ async def setup_writer(self):
|
|
|
+ _, writer = await asyncio.open_connection(self.host, self.output_port)
|
|
|
+ self._writer = writer
|
|
|
+
|
|
|
+ async def run_server(self):
|
|
|
+ await self.setup_reader()
|
|
|
+ while not self.stopping:
|
|
|
+ try:
|
|
|
+ while len(self.buffer) >= 10**4:
|
|
|
+ await asyncio.sleep(1)
|
|
|
+ try:
|
|
|
+ input_data = await self.reader.readexactly(10**4)
|
|
|
+ except asyncio.IncompleteReadError as e:
|
|
|
+ input_data = e.partial
|
|
|
+ self.buffer.append(input_data)
|
|
|
+ except Exception as e:
|
|
|
+ logging.error(e)
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
loop = asyncio.get_event_loop()
|
|
|
try:
|
|
|
logging.info("Starting file bridging server...")
|
|
|
- loop.run_until_complete(
|
|
|
- asyncio.gather(
|
|
|
- read_input_socket,
|
|
|
- write_on_output_socket
|
|
|
- )
|
|
|
- )
|
|
|
+ # loop.run_until_complete(
|
|
|
+ # asyncio.gather(
|
|
|
+ # read_input_socket,
|
|
|
+ # write_on_output_socket
|
|
|
+ # )
|
|
|
+ # )
|
|
|
except KeyboardInterrupt():
|
|
|
logging.info("Received KeyboardInterrupt, stopping...")
|