Skip to content

Commit

Permalink
Allow custom socket listener (#223)
Browse files Browse the repository at this point in the history
  • Loading branch information
mildred committed Aug 18, 2023
1 parent 7aeaa8f commit f6b40d9
Show file tree
Hide file tree
Showing 4 changed files with 17 additions and 8 deletions.
2 changes: 1 addition & 1 deletion prologue.nimble
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ requires "nim >= 1.6.0"
requires "regex >= 0.20.0"
requires "nimcrypto >= 0.5.4"
requires "cookiejar >= 0.2.0"
requires "httpx >= 0.3.4"
requires "httpx >= 0.3.7"
requires "logue >= 0.2.0"


Expand Down
8 changes: 7 additions & 1 deletion src/prologue/core/application.nim
Original file line number Diff line number Diff line change
Expand Up @@ -555,6 +555,8 @@ proc runAsync*(app: Prologue) {.inline, async.} =


when isMainModule:
import net

proc hello(ctx: Context) {.async.} =
logging.debug "hello"
resp "<h1>Hello, Prologue!</h1>"
Expand All @@ -579,7 +581,11 @@ when isMainModule:
logging.debug "doLogin"
resp redirect("/hello/Nim")

let settings = newSettings(appName = "Prologue", debug = true)
let socket = newSocket()
socket.bindAddr(Port(8080), "0.0.0.0")
socket.setSockOpt(OptReuseAddr, true)
socket.listen()
let settings = newSettings(appName = "Prologue", debug = true, listener = socket)
var app = newApp(settings = settings)

app.addRoute("/", home, HttpGet)
Expand Down
2 changes: 1 addition & 1 deletion src/prologue/core/beast/server.nim
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ proc execStartupEvent*(app: Prologue) =
proc getSettings(app: Prologue): httpx.Settings =
result = httpx.initSettings(app.gScope.settings.port, app.gScope.settings.address,
app.gScope.settings["prologue"].getOrDefault("numThreads").getInt(0),
app.startupClosure)
app.startupClosure, app.gScope.settings.listener)

proc serve*(app: Prologue,
callback: proc (request: NativeRequest): Future[void] {.closure, gcsafe.},
Expand Down
13 changes: 8 additions & 5 deletions src/prologue/core/nativesettings.nim
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@

import std/[mimetypes, json, tables, strtabs]
from std/nativesockets import Port
from std/net import Socket

from ./types import SecretKey, EmptySecretKeyError, len
from ./urandom import randomString
Expand All @@ -24,6 +25,7 @@ type
Settings* = ref object ## Global settings for all handlers.
address*: string ## The address of socket.
port*: Port ## The port of socket.
listener*: Socket ## listening socket to use (nil to auto create)
debug*: bool ## Debug mode(true is yes).
reusePort*: bool ## Use socket port in multiple times.
bufSize*: int ## Buffer size of sending static files.
Expand Down Expand Up @@ -58,23 +60,24 @@ func newSettings*(
secretKey = randomString(8),
appName = "",
bufSize = 40960,
data: JsonNode = nil
data: JsonNode = nil,
listener: Socket = nil
): Settings =
## Creates a new `Settings`.
if secretKey.len == 0:
raise newException(EmptySecretKeyError, "Secret key can't be empty!")

if data == nil:
result = Settings(address: address, port: port, debug: debug,
reusePort: reusePort, bufSize: bufSize,
result = Settings(address: address, port: port, listener: listener,
debug: debug, reusePort: reusePort, bufSize: bufSize,
data: %* {"prologue": {"secretKey": secretKey,
"appName": appName}})
else:
var data = data
data["prologue"] = %* {"secretKey": secretKey, "appName": appName}

result = Settings(address: address, port: port, debug: debug,
reusePort: reusePort, bufSize: bufSize,
result = Settings(address: address, port: port, listener: listener,
debug: debug, reusePort: reusePort, bufSize: bufSize,
data: data)

func newSettingsFromJsonNode*(settings: var Settings, data: JsonNode) {.inline.} =
Expand Down

0 comments on commit f6b40d9

Please sign in to comment.