mutating func run()

in SampleApp/Sources/FishyActorsDemo/main.swift [37:83]


  mutating func run() throws {
    LoggingSystem.bootstrap(PrettyDemoLogHandler.init)
    let group = MultiThreadedEventLoopGroup(numberOfThreads: System.coreCount)
    let otel = OTel(
        serviceName: "chatroom",
        eventLoopGroup: group,
        processor: OTel.BatchSpanProcessor(
            exportingTo: OtlpGRPCSpanExporter(config: OtlpGRPCSpanExporter.Config(eventLoopGroup: group)),
            eventLoopGroup: group
        )
    )
    try otel.start().wait()
    InstrumentationSystem.bootstrap(otel.tracer())

    var keepAlive: Set<Chatter> = []

    // one node to keep the chat rooms:
    let roomNode = try FishyTransport(host: "127.0.0.1", port: 8001, group: group, logLevel: transportLogLevel)
    // multiple nodes for the regional chatters:
    let firstNode = try FishyTransport(host: "127.0.0.1", port: 9002, group: group, logLevel: transportLogLevel)
    let secondNode = try FishyTransport(host: "127.0.0.1", port: 9003, group: group, logLevel: transportLogLevel)

    let room = ChatRoom(topic: "Cute Capybaras", transport: roomNode)

    let alice = Chatter(transport: firstNode)
    let bob = Chatter(transport: secondNode)
    let charlie = Chatter(transport: secondNode)

    for chatter in [alice, bob, charlie] {
      keepAlive.insert(chatter)

      Task {
        // we resolve a reference to `room` using our `p.actorTransport`
        // since all chatters are on other nodes than the chat room,
        // this will always yield a remote reference.
        let remoteRoom = try ChatRoom.resolve(room.id, using: chatter.actorTransport)
        try await chatter.join(room: remoteRoom)
      }
    }

    // normally transports will ofer `await .park()` functions, but for now just sleep:
    sleep(1000)
    _ = keepAlive

    try otel.shutdown().wait()
    try group.syncShutdownGracefully()
  }