Move bee movie demo to examples and cleanup
This commit is contained in:
parent
7cc9ddda75
commit
4c2bf6873a
|
@ -10,19 +10,8 @@ from ordered_queue import OrderedQueue
|
|||
SUPPORTED_PUBSUB_PROTOCOLS = ["/floodsub/1.0.0"]
|
||||
BEE_MOVIE_TOPIC = "bee_movie"
|
||||
|
||||
# Message format:
|
||||
# Sending crypto: <source>,<dest>,<amount as integer>
|
||||
# Ex. send,aspyn,alex,5
|
||||
# Set crypto: <dest>,<amount as integer>
|
||||
# Ex. set,rob,5
|
||||
# Determine message type by looking at first item before first comma
|
||||
|
||||
class MsgOrderingNode():
|
||||
"""
|
||||
Node which has an internal balance mapping, meant to serve as
|
||||
a dummy crypto blockchain. There is no actual blockchain, just a simple
|
||||
map indicating how much crypto each user in the mappings holds
|
||||
"""
|
||||
|
||||
def __init__(self):
|
||||
self.balances = {}
|
||||
|
@ -71,12 +60,10 @@ class MsgOrderingNode():
|
|||
asyncio.ensure_future(self.handle_incoming_msgs())
|
||||
|
||||
async def publish_bee_movie_word(self, word, msg_id=None):
|
||||
# print("Publish hit for " + word)
|
||||
my_id = str(self.libp2p_node.get_id())
|
||||
if msg_id is None:
|
||||
msg_id = self.next_msg_id_func()
|
||||
packet = generate_RPC_packet(my_id, [BEE_MOVIE_TOPIC], word, msg_id)
|
||||
# print("Packet generated")
|
||||
await self.floodsub.publish(my_id, packet.SerializeToString())
|
||||
|
||||
async def handle_bee_movie_word(self, seqno, word):
|
||||
|
@ -87,9 +74,3 @@ class MsgOrderingNode():
|
|||
# Get just the word (and not the seqno) and return the word
|
||||
next_word = (await self.priority_queue.get())[1]
|
||||
return next_word
|
||||
# if (self.priority_queue.qsize() > 0 and \
|
||||
# self.priority_queue[0][0] == self.last_word_gotten_seqno + 1):
|
||||
# return await self.priority_queue.get()
|
||||
# else:
|
||||
# # Wait until a word is put with next_word_seqno == self.last_word_gotten_seqno + 1
|
||||
# # Then return first element of priority queue
|
|
@ -12,13 +12,10 @@ class OrderedQueue():
|
|||
self.task = None
|
||||
|
||||
async def put(self, item):
|
||||
# print("Put " + str(item))
|
||||
seqno = item[0]
|
||||
await self.queue.put(item)
|
||||
# print("Added to queue " + str(item))
|
||||
if self.last_gotten_seqno + 1 == seqno and self.task is not None:
|
||||
# Allow get future to return the most recent item that is put
|
||||
# print("Set called")
|
||||
self.task.set()
|
||||
|
||||
async def get(self):
|
||||
|
@ -26,30 +23,20 @@ class OrderedQueue():
|
|||
front_item = await self.queue.get()
|
||||
|
||||
if front_item[0] == self.last_gotten_seqno + 1:
|
||||
# print("Trivial get " + str(front_item))
|
||||
self.last_gotten_seqno += 1
|
||||
return front_item
|
||||
else:
|
||||
# Put element back as it should not be delivered yet
|
||||
# print("Front item put back 1")
|
||||
# print(str(self.last_gotten_seqno))
|
||||
# print(front_item[1])
|
||||
await self.queue.put(front_item)
|
||||
# print("Front item put back 2")
|
||||
|
||||
# print("get 2")
|
||||
# Wait until
|
||||
# Wait until item with subsequent seqno is put on queue
|
||||
self.task = asyncio.Event()
|
||||
# print("get 3")
|
||||
await self.task.wait()
|
||||
# print("get 4")
|
||||
item = await self.queue.get()
|
||||
# print("get 5")
|
||||
# print(str(item) + " got from queue")
|
||||
|
||||
# Remove task
|
||||
self.task = None
|
||||
|
||||
self.last_gotten_seqno += 1
|
||||
|
||||
return item
|
||||
return item
|
|
@ -27,12 +27,11 @@ def create_setup_in_new_thread_func(dummy_node):
|
|||
|
||||
async def perform_test(num_nodes, adjacency_map, action_func, assertion_func):
|
||||
"""
|
||||
Helper function to allow for easy construction of custom tests for dummy account nodes
|
||||
Helper function to allow for easy construction of custom tests for msg ordering nodes
|
||||
in various network topologies
|
||||
:param num_nodes: number of nodes in the test
|
||||
:param adjacency_map: adjacency map defining each node and its list of neighbors
|
||||
:param action_func: function to execute that includes actions by the nodes,
|
||||
such as send crypto and set crypto
|
||||
:param action_func: function to execute that includes actions by the nodes
|
||||
:param assertion_func: assertions for testing the results of the actions are correct
|
||||
"""
|
||||
|
||||
|
@ -54,12 +53,12 @@ async def perform_test(num_nodes, adjacency_map, action_func, assertion_func):
|
|||
# Start a thread for each node so that each node can listen and respond
|
||||
# to messages on its own thread, which will avoid waiting indefinitely
|
||||
# on the main thread. On this thread, call the setup func for the node,
|
||||
# which subscribes the node to the CRYPTO_TOPIC topic
|
||||
# which subscribes the node to the BEE_MOVIE_TOPIC topic
|
||||
for dummy_node in dummy_nodes:
|
||||
thread = Thread(target=create_setup_in_new_thread_func(dummy_node))
|
||||
thread.run()
|
||||
|
||||
# Allow time for nodes to subscribe to CRYPTO_TOPIC topic
|
||||
# Allow time for nodes to subscribe to BEE_MOVIE_TOPIC topic
|
||||
await asyncio.sleep(0.25)
|
||||
|
||||
# Perform action function
|
Loading…
Reference in New Issue
Block a user