From 278a2d3b34b44dd47a4621a62ff4ddb740629fa2 Mon Sep 17 00:00:00 2001 From: zixuanzh Date: Sun, 14 Oct 2018 13:47:06 -0400 Subject: [PATCH 1/3] define interfaces --- host/basic_host.py | 4 +++ host/host_interface.py | 49 ++++++++++++++++++++++++++++++++++++ host/interface.py | 0 network/network_interface.py | 25 ++++++++++++++++++ network/stream_interface.py | 38 ++++++++++++++++++++++++++++ network/swarm.py | 4 +++ 6 files changed, 120 insertions(+) create mode 100644 host/host_interface.py delete mode 100644 host/interface.py create mode 100644 network/network_interface.py create mode 100644 network/stream_interface.py create mode 100644 network/swarm.py diff --git a/host/basic_host.py b/host/basic_host.py index e69de29b..7f5fdefc 100644 --- a/host/basic_host.py +++ b/host/basic_host.py @@ -0,0 +1,4 @@ +from host_interface import Host + +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 00000000..367128ce --- /dev/null +++ b/host/host_interface.py @@ -0,0 +1,49 @@ +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 instance + :return: true if successful + """ + pass + + @abstractmethod + def new_stream(self, context, peer_id, protocol_ids): + """ + :param context: a context instance + :param peer_id: peer_id that host is connecting + :param proto_ids: list of protocol ids 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 e69de29b..00000000 diff --git a/network/network_interface.py b/network/network_interface.py new file mode 100644 index 00000000..fb6c7a47 --- /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 00000000..dc0a5192 --- /dev/null +++ b/network/stream_interface.py @@ -0,0 +1,38 @@ +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 diff --git a/network/swarm.py b/network/swarm.py new file mode 100644 index 00000000..4b1c81a4 --- /dev/null +++ b/network/swarm.py @@ -0,0 +1,4 @@ +from interface import Network + +class Swarm(Network): + pass \ No newline at end of file From a672a5017f26a76fa995e063890bf695d6835d26 Mon Sep 17 00:00:00 2001 From: zixuanzh Date: Sun, 14 Oct 2018 14:11:03 -0400 Subject: [PATCH 2/3] update interfaces --- host/basic_host.py | 5 +++++ host/host_interface.py | 8 +++++--- network/stream_interface.py | 9 +++++++++ 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/host/basic_host.py b/host/basic_host.py index 7f5fdefc..b0c5a7d8 100644 --- a/host/basic_host.py +++ b/host/basic_host.py @@ -1,4 +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 index 367128ce..ac53c230 100644 --- a/host/host_interface.py +++ b/host/host_interface.py @@ -33,17 +33,19 @@ class Host(ABC): """ set stream handler for host :param protocol_id: protocol id used on stream - :param stream_handler: a stream handler instance + :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_ids): + 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_ids: list of protocol ids that stream runs on + :param proto_id: protocol id that stream runs on :return: true if successful """ pass \ No newline at end of file diff --git a/network/stream_interface.py b/network/stream_interface.py index dc0a5192..3d92d8ea 100644 --- a/network/stream_interface.py +++ b/network/stream_interface.py @@ -36,3 +36,12 @@ class Stream(ABC): :return: number of bytes written """ pass + + @abstractmethod + def close(): + """ + close stream + :return: true if successful + """ + pass + From d0b12f5b4f1667c1ae9569c5584a922be70e0812 Mon Sep 17 00:00:00 2001 From: zixuanzh Date: Sun, 14 Oct 2018 16:39:44 -0400 Subject: [PATCH 3/3] update swarm --- network/swarm.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/network/swarm.py b/network/swarm.py index 4b1c81a4..feb91e3d 100644 --- a/network/swarm.py +++ b/network/swarm.py @@ -1,4 +1,4 @@ -from interface import Network +from network_interface import Network class Swarm(Network): pass \ No newline at end of file