# Nodes and Workers

{% @mermaid/diagram content="---
title: ctx.start\_worker("echoer", Echoer, AllowAll, AllowAll)
--------------------------------------------------------------

sequenceDiagram
User->>Context(app): 1. start\_worker
Context(app)->>Context(worker): 2. create worker context
Context(worker)->>WorkerRelay: 3. create worker relay
WorkerRelay->>WorkerRelay: 4. start receiving loop
Context(worker)->>Router: 5. send(StartWorker)
Router->>Router: 6. register(worker address, context sender)
" %}

{% @mermaid/diagram content="
sequenceDiagram
User->>Context(app): 1. send("echoer", "Hello Ockam!")
Context(app)->>Router: 2. send(SenderReq("echoer", reply\_sender))
Router->>Router: 3.resolve\_address
Router-->>Context(app): 4. address + worker channel sender
Context(app)->>Context(app): 5. make relay message
Context(app)->>Context(app): 6. check outgoing relay message
Context(app)->>WorkerRelay: 7. send relay message
WorkerRelay->>Context(worker): 8. receive\_next
Context(worker)->>Context(worker): 9. is\_authorized(relay message)
WorkerRelay->>WorkerRelay: 10. decode message
WorkerRelay->>Worker: 11. handle\_message
Worker->>Context(worker): 12. send(return router, message body)
Context(worker)-->>Context(app): 13. routed back message
User->>Context(app): 14. wait on the message using the app Context receiver
" %}
