diff --git a/host/basic_host.py b/host/basic_host.py index e69de29..b0c5a7d 100644 --- a/host/basic_host.py +++ b/host/basic_host.py @@ -0,0 +1,9 @@ +from host_interface import Host + +# Upon host creation, host takes in options, +# including the list of addresses on which to listen. +# Host then parses these options and delegates to its Network instance, +# telling it to listen on the given listen addresses. + +class BasicHost(Host): + pass \ No newline at end of file diff --git a/host/host_interface.py b/host/host_interface.py new file mode 100644 index 0000000..ac53c23 --- /dev/null +++ b/host/host_interface.py @@ -0,0 +1,51 @@ +from abc import ABC + +class Host(ABC): + + # default options constructor + def __init__(self, context, network): + self.context = context + self.network = network + + @abstractmethod + def id(self): + """ + :return: peer_id of host + """ + pass + + @abstractmethod + def network(self): + """ + :return: network instance of host + """ + pass + + @abstractmethod + def mux(self): + """ + :return: mux instance of host + """ + pass + + @abstractmethod + def set_stream_handler(self, protocol_id, stream_handler): + """ + set stream handler for host + :param protocol_id: protocol id used on stream + :param stream_handler: a stream handler function + :return: true if successful + """ + pass + + # protocol_id can be a list of protocol_ids + # stream will decide which protocol_id to run on + @abstractmethod + def new_stream(self, context, peer_id, protocol_id): + """ + :param context: a context instance + :param peer_id: peer_id that host is connecting + :param proto_id: protocol id that stream runs on + :return: true if successful + """ + pass \ No newline at end of file diff --git a/host/interface.py b/host/interface.py deleted file mode 100644 index e69de29..0000000 diff --git a/network/network_interface.py b/network/network_interface.py new file mode 100644 index 0000000..fb6c7a4 --- /dev/null +++ b/network/network_interface.py @@ -0,0 +1,25 @@ +from abc import ABC + +class Network(ABC): + + def __init__(self, context, my_peer_id, peer_store): + self.context = context + self.my_peer_id = my_peer_id + self.peer_store = peer_store + + @abstractmethod + def set_stream_handler(stream_handler): + """ + :param stream_handler: a stream handler instance + :return: true if successful + """ + pass + + @abstractmethod + def new_stream(context, peer_id): + """ + :param context: context instance + :param peer_id: peer_id of destination + :return: stream instance + """ + pass diff --git a/network/stream_interface.py b/network/stream_interface.py new file mode 100644 index 0000000..3d92d8e --- /dev/null +++ b/network/stream_interface.py @@ -0,0 +1,47 @@ +from abc import ABC + +class Stream(ABC): + + def __init__(self, context, peer_id): + self.context = context + self.peer_id = peer_id + + @abstractmethod + def protocol(): + """ + :return: protocol id that stream runs on + """ + pass + + @abstractmethod + def set_protocol(protocol_id): + """ + :param protocol_id: protocol id that stream runs on + :return: true if successful + """ + pass + + @abstractmethod + def read(): + """ + read from stream + :return: bytes of input + """ + pass + + @abstractmethod + def write(bytes): + """ + write to stream + :return: number of bytes written + """ + pass + + @abstractmethod + def close(): + """ + close stream + :return: true if successful + """ + pass + diff --git a/network/swarm.py b/network/swarm.py new file mode 100644 index 0000000..feb91e3 --- /dev/null +++ b/network/swarm.py @@ -0,0 +1,4 @@ +from network_interface import Network + +class Swarm(Network): + pass \ No newline at end of file