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)

Uses (21)

Used by (3)