diff --git a/network/stream/__init__.py b/network/stream/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/network/stream/net_stream.py b/network/stream/net_stream.py new file mode 100644 index 0000000..0dca44d --- /dev/null +++ b/network/stream/net_stream.py @@ -0,0 +1,42 @@ +import asyncio +from .net_stream_interface import INetStream + +class NetStream(INetStream): + + def __init__(self, muxed_stream): + self.muxed_stream = muxed_stream + + def get_protocol(self): + """ + :return: protocol id that stream runs on + """ + return self.protocol_id + + def set_protocol(self, protocol_id): + """ + :param protocol_id: protocol id that stream runs on + :return: true if successful + """ + self.protocol_id = protocol_id + + def read(self): + """ + read from stream + :return: bytes of input until EOF + """ + return self.muxed_stream.read() + + def write(self, bytes): + """ + write to stream + :return: number of bytes written + """ + return self.muxed_stream.write(bytes) + + def close(self): + """ + close stream + :return: true if successful + """ + self.muxed_stream.close() + return True diff --git a/network/stream/net_stream_interface.py b/network/stream/net_stream_interface.py new file mode 100644 index 0000000..920e2fa --- /dev/null +++ b/network/stream/net_stream_interface.py @@ -0,0 +1,47 @@ +from abc import ABC, abstractmethod + +class INetStream(ABC): + + def __init__(self, peer_id, multi_addr, connection): + self.peer_id = peer_id + self.multi_addr = multi_addr + self.connection = connection + + @abstractmethod + def get_protocol(self): + """ + :return: protocol id that stream runs on + """ + pass + + @abstractmethod + def set_protocol(self, protocol_id): + """ + :param protocol_id: protocol id that stream runs on + :return: true if successful + """ + pass + + @abstractmethod + def read(self): + """ + read from stream + :return: bytes of input + """ + pass + + @abstractmethod + def write(self, _bytes): + """ + write to stream + :return: number of bytes written + """ + pass + + @abstractmethod + def close(self): + """ + close stream + :return: true if successful + """ + pass