Last active
August 9, 2020 21:56
-
-
Save gbaptista/8eb2d925c0ad2bc36d6c6d97c8859175 to your computer and use it in GitHub Desktop.
Vega Server - Fennel Examples https://fennel-lang.org/reference
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(local vega (require "vega")) | |
(λ port [] | |
(let [default 3000 cli (. arg 1)] | |
(if cli cli default))) | |
(λ telnet-handler [name response meta] | |
(meta.log:info (.. "Log from" (meta.log.color:yellow " Telnet Handler"))) | |
(response:write (.. "\nHello " (tostring name) "!\n\n"))) | |
(local telnet-protocol | |
{:identifier "Telnet" | |
:dispatcher (λ [] true) | |
:handler telnet-handler}) | |
(local vega-config | |
{:port (port) | |
:protocol telnet-protocol}) | |
(vega.tcp vega-config) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(local vega (require "vega")) | |
(local http1 (require "vega-http1")) | |
(λ port [] | |
(let [default 3000 cli (. arg 1)] | |
(if cli cli default))) | |
(fn handler [header ?body response meta] | |
(meta.log:info (.. "Log from" (meta.log.color:light-green " HTTP/1.1 Handler"))) | |
(response:set-status 200) | |
(response:set-header "Content-Type" "text/plain") | |
(response:write "OK")) | |
(local vega-config | |
{:port (port) | |
:protocol (http1 {:handler handler})}) | |
(vega.tcp vega-config) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(local vega (require "vega")) | |
(local http1 (require "vega-http1")) | |
(local vega-tls (require "vega-tls")) | |
(λ port [] | |
(let [default 4570 cli (. arg 1)] | |
(if cli cli default))) | |
(local tls-config {:cafile "ca.pem" | |
:certificate "certificate.pem" | |
:key "key.pem" | |
:alpn ["http/1.1"]}) | |
(fn handler [header ?body response meta] | |
(meta.log:info (.. "Log from" (meta.log.color:light-green " HTTP/1.1 Handler"))) | |
(response:set-status 200) | |
(response:set-header "Content-Type" "text/plain") | |
(response:write "OK")) | |
(local vega-config | |
{:port (port) | |
:middleware/acceptor (vega-tls tls-config) | |
:protocol (http1 {:handler handler})}) | |
(vega.tcp vega-config) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(local vega (require "vega")) | |
(local http1 (require "vega-http1")) | |
(local http2 (require "vega-http2")) | |
(λ port [] | |
(let [default 4570 cli (. arg 1)] | |
(if cli cli default))) | |
(fn http1-handler [header ?body response meta] | |
(meta.log:info (.. "Log from" (meta.log.color:light-green " HTTP/1.1 Handler"))) | |
(response:set-status 101) | |
(response:set-header "Connection" "Upgrade") | |
(response:set-header "Upgrade" "h2c")) | |
(fn http2-handler [header ?body response meta] | |
(meta.log:info (.. "Log from" (meta.log.color:light-green " HTTP/2 Handler"))) | |
(response:set-status 200) | |
(response:set-header :content-type :text/plain) | |
(response:write "OK")) | |
(local vega-config | |
{:port (port) | |
:protocols [(http1 {:handler http1-handler}) | |
(http2 {:handler http2-handler})]}) | |
(vega.tcp vega-config) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(local vega (require "vega")) | |
(local http2 (require "vega-http2")) | |
(local vega-tls (require "vega-tls")) | |
(λ port [] | |
(let [default 4570 cli (. arg 1)] | |
(if cli cli default))) | |
(local tls-config {:cafile "ca.pem" | |
:certificate "certificate.pem" | |
:key "key.pem" | |
:alpn ["h2"]}) | |
(fn handler [header ?body response meta] | |
(meta.log:info (.. "Log from" (meta.log.color:light-green " HTTP/2 Handler"))) | |
(response:set-status 200) | |
(response:set-header :content-type :text/plain) | |
(response:write "OK")) | |
(local vega-config | |
{:port (port) | |
:middleware/acceptor (vega-tls tls-config) | |
:protocol (http2 {:handler handler})}) | |
(vega.tcp vega-config) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(λ handler [header ?body response meta] | |
(let [headers (. header :headers) | |
method (. headers ":method") | |
path (. headers ":path")] | |
(match path | |
"/headers" (handler-headers header ?body response meta) | |
"/data" (handler-data header ?body response meta) | |
"/empty" (handler-empty header ?body response meta) | |
_ (handler-default header ?body response meta)))) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(local vega (require "vega")) | |
(λ port [] | |
(let [default 3000 cli (. arg 1)] | |
(if cli cli default)) | |
(λ tcp-acceptor [client meta] | |
; Set client connection configs... | |
; Get client information (IP and Port)... | |
; Apply middlewares (e.g. TLS middleware).. | |
(meta.config.receiver client meta)) | |
(λ tcp-receiver [client meta] | |
(let [alpn meta.info.client.alpn | |
first-protocol (. meta.config.protocols 1) | |
line (client:receive "*l")] | |
(if (first-protocol.dispatcher line alpn meta) | |
(first-protocol.controller line client first-protocol.config meta)))) | |
(λ telnet-dispatcher [] true) | |
(λ telnet-controller [content client protocol-config meta] | |
(let [writer | |
{:buffer "" :write (λ [instance data] (set instance.buffer (.. instance.buffer data)))}] | |
(protocol-config.handler content writer meta) | |
(client:send writer.buffer) | |
(client:close) | |
(meta.log:info (meta.log.color:light-red "Connection closed")))) | |
(λ telnet-handler [content response meta] | |
(meta.log:info (.. "Log from" (meta.log.color:light-green " Telnet Handler"))) | |
(response:write (.. "\nHello " (tostring content) "!\n\n"))) | |
(local telnet-protocol | |
{:identifier "Telnet" | |
:dispatcher telnet-dispatcher | |
:controller telnet-controller | |
:handler telnet-handler}) | |
(local vega-config | |
{:port (port) | |
:acceptor tcp-acceptor | |
:receiver tcp-receiver | |
:protocol telnet-protocol}) | |
(vega.tcp vega-config) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment