From 31311ee91c6adae170f81e11b2044ed39d7fb47c Mon Sep 17 00:00:00 2001 From: urlysses Date: Mon, 13 Feb 2017 22:32:00 -0500 Subject: [PATCH] Save user routing in a wordlist. The aim is to try to avoid polluting the global wordlist with routing functions. The alternative would be to have users simply define words that match their routes, e.g.: ``` : 1991/hi ( some definition of hi's handler ) ; ``` I'm still not entirely convinced that the above method isn't a better solution. --- 1991.fs | 35 ++++++++++++++++++++++++----------- 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/1991.fs b/1991.fs index bb6f596..a13652a 100644 --- a/1991.fs +++ b/1991.fs @@ -2,6 +2,25 @@ include unix/socket.fs + +\ User-defined routing +wordlist constant routes +: find-route ( addr u -- data ) + routes search-wordlist if + >body @ + else 0 then ; +: register-route ( data addr u -- ) + 2dup routes search-wordlist if + routes drop nip nip + >body ! + else + routes get-current >r set-current \ switch definition word lists + nextname create , + r> set-current + then ; + + +\ Internal request handling : read-request ( socket -- addr u ) pad 4096 read-socket ; : send-response ( addr u socket -- ) @@ -15,18 +34,12 @@ include unix/socket.fs client read-request type s\" HTTP/1.1 200 OK\n Content-Type: text/html\n\n fffff" client send-response again ; -: 1991: ( port -- ) create-server 0 start-server ; + +\ Userland +: 1991: ( port -- ) + create-server 0 start-server ; : 1991/ ( " " -- ) - \ TODO store each path => xt and execute within - \ handle-server - bl word - cr ." Setting get for " count type - \ TODO handle non-words. Should give the user - \ some compile-/run-time error. - ' \ fetch xt - dup >name - cr ." handler word is " name>string type - cr ." running handler: " execute ; + bl word ' swap count register-route ; \ App demo: