def server.run.loop
bend-kit-http@0.38.5.0 · http.bend:6488
import bend-kit-http@0.38.5.0/http.bend as Http
import Base
import bend-kit-http@0.38.5.0/admission.bend as Admission
6488def server.run.loop(~C: Data, ~operation: C -> Limits -> Chan(Admission.Command) -> Socket -> IO(Unit), step: ServerLoop<C>) -> IO(ServerExit):
6489 match step:
6490 case ServerListening{server}:
6491 do IO<ServerExit>:
6492 result : Server<C> & Result<&1, &1, U32 & String, Chan(Unit)> <- server.accept.operation(~C, ~operation, server)
6493 server.run.loop(~C, ~operation, ServerAccepted{result})
6494 case ServerAccepted{accepted}:
6495 (server, result) = accepted
6496 match result:
6497 case Fail{+error}:
6498 server.run.loop(~C, ~operation, ServerFailed{error.capacity(error), server, error})
6499 case Done{finished}:
6500 do IO<ServerExit>:
6501 Chan.close(Unit, finished)
6502 server.run.loop(~C, ~operation, ServerListening{server})
6503 case ServerFailed{retry, server, +error}:
6504 match retry:
6505 case True{}:
6506 server.run.loop(~C, ~operation, ServerListening{server})
6507 case False{}:
6508 server.finish(~C, error.stopped(error), error, server)