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