# SPDX-FileCopyrightText: ☭ Emery Hemingway # SPDX-License-Identifier: Unlicense ## Thin wrapper over `syndicate/drivers/http_driver`. import pkg/taps, pkg/preserves, pkg/syndicate, pkg/syndicate/drivers/http_driver, pkg/syndicate/protocols/[gatekeeper, sturdy], ../schema/config proc spawnHttpDriver*(turn: Turn; relay: Cap): Actor {.discardable.} = ## Create a dataspace for the driver and to the gatekeeper dance. spawnActor(turn, "http-driver") do (turn: Turn): let pat = Resolve?:{ 0: HttpDriverStep.dropType } during(turn, relay, pat): let ds = turn.newDataspace() http_driver.spawnHttpDriver(turn, ds) # Spawn a shared driver. let pat = Resolve?:{ 0: HttpDriverStep.dropType, 1: grab() } during(turn, relay, pat) do (obs: Cap): discard publish(turn, obs, ResolvedAccepted(responderSession: ds)) # Pass the shared driver dataspace. when isMainModule: import syndicate/relays when defined(solo5): import solo5 acquireDevices([("eth0", netBasic)], netAcquireHook) proc envRoute: Route = var pr = parsePreserves $solo5_start_info.cmdline if result.fromPreserves pr: return elif pr.isSequence: for e in pr: if result.fromPreserves e: return quit("failed to parse command line for route to Syndicate gatekeeper") runActor("main") do (turn: Turn): let relay = newDataspace(turn) spawnRelays(turn, relay) resolve(turn, relay, envRoute(), spawnHttpDriver) else: runActor("main") do (turn: Turn): resolveEnvironment(turn) do (turn: Turn; relay: Cap): spawnHttpDriver(turn, relay)