mipha/gemini.moon

35 lines
647 B
Plaintext

cqueues = require "cqueues"
url = require "net.url"
class Server
new: (hdlr) =>
@cq = cqueues.new!
@hdlr = hdlr
attach: (cq) =>
cq\wrap ->
@cq\loop!
listen: (srv) =>
@cq\wrap ->
for conn in srv\clients!
@cq\wrap ->
with conn
_, ip = \peername!
request = \read "*l"
\shutdown "r"
u = url.parse request
if u.path == ""
u.path = "/"
ctx =
:ip
host: u.host
path: u.path
query: u.query
@hdlr\serve ctx, conn
\close!
{
:Server
}