http_translator: control over port binding

This commit is contained in:
Emery Hemingway 2022-06-28 11:13:20 -05:00
parent ffbe02898a
commit 7c9765fd23
4 changed files with 17 additions and 9 deletions

View File

@ -6,6 +6,8 @@ Methods = #{Method} .
; A URL path split into elements
Path = [string ...] .
Listener = <listen @port int> .
; Register an entity that will handle requests at path prefix.
; TODO: assert the public base URL of the handler to the entity.
Handler = <handler @methods Methods @path Path @entity #!any> .

View File

@ -13,9 +13,8 @@ $other [
]
]
? <service-object <daemon http_translator> ?cap> [
$cap [
; publish GET requests with prefix "/foo/bar" to other dataspace
<handler #{GET} ["foo" "bar" ] $other>
]
? <service-object <daemon http_translator> ?cap> $cap [
<listen 8888>
; publish GET requests with prefix "/foo/bar" to other dataspace
handler #{GET} ["foo" "bar" ] $other>
]

View File

@ -83,7 +83,10 @@ bootDataspace("main") do (ds: Ref; turn: var Turn):
run(parentFacet) do (turn: var Turn): retract(turn, rHandle)
hitch(fut, parentFut)
var http = newAsyncHttpServer()
asyncCheck serve(http, Port 8888, handleRequest)
during(turn, ds, ?Listener) do (port: Port):
var http = newAsyncHttpServer()
asyncCheck serve(http, port, handleRequest)
do:
close(http)
runForever()

View File

@ -11,6 +11,9 @@ type
`headers`*: Headers
`body`*: string
Listener* {.preservesRecord: "listen".} = object
`port`*: int
Handler*[E] {.preservesRecord: "handler".} = ref object
`methods`*: Methods
`path`*: Path
@ -33,8 +36,9 @@ proc `$`*[E](x: Handler[E]): string =
proc encode*[E](x: Handler[E]): seq[byte] =
encode(toPreserve(x, E))
proc `$`*(x: Path | Headers | Response | Request | Methods): string =
proc `$`*(x: Path | Headers | Response | Listener | Request | Methods): string =
`$`(toPreserve(x))
proc encode*(x: Path | Headers | Response | Request | Methods): seq[byte] =
proc encode*(x: Path | Headers | Response | Listener | Request | Methods): seq[
byte] =
encode(toPreserve(x))