sequenceDiagram

participant ServerBuilder
participant WorkerClient
participant Worker
participant StreamService
participant HttpServiceHandler
participant Tokio

ServerBuilder-->>Tokio: spawn(Worker)

Tokio-->>Worker: poll()
alt WorkerState::Available
	loop
		Worker->>WorkerClient: rx.poll_next()
		WorkerClient->>Worker: WorkerCommand(Conn)
		Worker->>Worker: check_readiness()
		alt check_readiness() -> Ok(true)
			Note over Worker,StreamService: Worker::services[Conn.token]
			Worker-->>StreamService: call(ServerMessage::Connect(stream))
			StreamService->>HttpServiceHandler: call(stream)
			HttpServiceHandler->>StreamService: HttpServiceHandlerResponse as Future
			StreamService->>Tokio: spawn(HttpServiceHandlerResponse)

		else check_readiness() -> Ok(false)
			Worker-->>Worker: WorkerState::Unavailable
		else check_readiness() -> Err(token,idx)
			Worker-->>Worker: WorkerState::Restarting
		end
	end
end


Note over HttpServiceHandler: process connection