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)

Uses (21)

Used by (3)