Skip to content

Commit

Permalink
add broadcast by protocol example (#165)
Browse files Browse the repository at this point in the history
  • Loading branch information
Archento authored Sep 19, 2023
1 parent dbf6de4 commit 56e86a7
Showing 1 changed file with 58 additions and 0 deletions.
58 changes: 58 additions & 0 deletions python/examples/14-broadcast/main.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
from uagents import Agent, Bureau, Context, Model, Protocol
from uagents.setup import fund_agent_if_low

# create agents
# alice and bob will support the protocol
# charles will try to reach all agents supporting the protocol
alice = Agent(name="alice", seed="alice recovery phrase")
bob = Agent(name="bob", seed="bob recovery phrase")
charles = Agent(name="charles", seed="charles recovery phrase")

fund_agent_if_low(alice.wallet.address())
fund_agent_if_low(bob.wallet.address())
fund_agent_if_low(charles.wallet.address())


class BroadcastExampleRequest(Model):
pass


class BroadcastExampleResponse(Model):
text: str


# define protocol
proto = Protocol(name="proto", version="1.0")


@proto.on_message(model=BroadcastExampleRequest, replies=BroadcastExampleResponse)
async def handle_request(ctx: Context, sender: str, _msg: BroadcastExampleRequest):
await ctx.send(sender, BroadcastExampleResponse(text=f"Hello from {ctx.name}"))


# include protocol
# Note: after the first registration on the almanac smart contract, it will
# take about 5 minutes before the agents can be found through the protocol
alice.include(proto)
bob.include(proto)


# let charles send the message to all agents supporting the protocol
@charles.on_interval(period=5)
async def say_hello(ctx: Context):
await ctx.experimental_broadcast(proto.digest, message=BroadcastExampleRequest())


@charles.on_message(model=BroadcastExampleResponse)
async def handle_response(ctx: Context, sender: str, msg: BroadcastExampleResponse):
ctx.logger.info(f"Received response from {sender}: {msg.text}")


bureau = Bureau(port=8000, endpoint="http://localhost:8000/submit")
bureau.add(alice)
bureau.add(bob)
bureau.add(charles)


if __name__ == "__main__":
bureau.run()

0 comments on commit 56e86a7

Please sign in to comment.