]> gitweb @ CieloNegro.org - Lucu.git/blobdiff - examples/HelloWorld.hs
Unfoldable Dispatcher
[Lucu.git] / examples / HelloWorld.hs
index 42ccb90ff639c88479a5c241568c40675244be42..f8a4721dca6c5503a31e50715e69e43d0c0c2273 100644 (file)
@@ -1,36 +1,40 @@
-import Data.Maybe
-import Network
-import Network.HTTP.Lucu.Config
-import Network.HTTP.Lucu.Httpd
-import Network.HTTP.Lucu.Resource
-import Network.HTTP.Lucu.Response
-import Network.URI
-import System.Posix.Signals
+{-# LANGUAGE
+    OverloadedStrings
+  , QuasiQuotes
+  , UnicodeSyntax
+  #-}
+import Control.Applicative
+import Control.Monad.Unicode
+import qualified Data.ByteString.Lazy.Char8 as Lazy
+import Network.HTTP.Lucu
 
-main :: IO ()
-main = let config    = defaultConfig { cnfServerPort = PortNumber 9999 }
-           resources = mkResTree [ ([], helloWorld) ]
+main ∷ IO ()
+main = let config    = defaultConfig { cnfServerPort = "9999" }
+           resources = mkResTree
+                       [ ([]         , helloWorld               )
+                       , (["urandom"], staticFile "/dev/urandom")
+                       , (["inc"    ], staticDir "/usr/include" )
+                       ]
+           fallbacks = [ \ path → case path of
+                                     ["hello"] → return $ Just helloWorld
+                                     _         → return Nothing
+                       ]
        in
-         do installHandler sigPIPE Ignore Nothing
-            runHttpd config resources
+         do putStrLn "Access http://localhost:9999/ with your browser."
+            runHttpd config resources fallbacks
 
-
-helloWorld :: ResourceDef
+helloWorld ∷ ResourceDef
 helloWorld
-    = ResourceDef {
-        resUsesNativeThread = False
-      , resIsGreedy         = False
-      , resGet
-          = Just $ do setHeader "Content-Type" "text/plain"
-                      outputChunk "Hello, "
-                      outputChunk "World!\n"
-      , resHead   = Nothing
+    = emptyResource {
+        resGet
+          = Just $ do setContentType [mimeType| text/hello |]
+                      putChunk "Hello, "
+                      putChunk "World!\n"
+                      putChunks =≪ Lazy.pack <$> getRemoteAddr'
       , resPost
-          = Just $ do str1 <- inputChunk 3
-                      str2 <- inputChunk 3
-                      str3 <- inputChunk 3
-                      setHeader "Content-Type" "text/plain"
-                      output ("[" ++ str1 ++ " - " ++ str2 ++ "#" ++ str3 ++ "]")
-      , resPut    = Nothing
-      , resDelete = Nothing
-      }
\ No newline at end of file
+          = Just $ do str1 ← getChunk 3
+                      str2 ← getChunk 3
+                      str3 ← getChunk 3
+                      setContentType [mimeType| text/hello |]
+                      putChunks $ Lazy.fromChunks ["[", str1, " - ", str2, "#", str3, "]"]
+      }