annotate paper/src/warp.hs @ 70:0b1a059c49fa

fix
author kono
date Thu, 13 Feb 2014 12:08:24 +0900
parents 17676e245515
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
13
17676e245515 add warp
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 {-# LANGUAGE OverloadedStrings #-}
17676e245515 add warp
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2 import Network.Wai
17676e245515 add warp
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 import Network.HTTP.Types (status200, status404)
17676e245515 add warp
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 import Network.Wai.Handler.Warp (run)
17676e245515 add warp
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 import Control.Monad.Trans (lift)
17676e245515 add warp
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 import Data.IORef (newIORef, atomicModifyIORef)
17676e245515 add warp
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 import Data.ByteString.Lazy.UTF8 (fromString)
17676e245515 add warp
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
8
17676e245515 add warp
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 application counter request = function counter
17676e245515 add warp
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 where
17676e245515 add warp
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 function = routes $ pathInfo request
17676e245515 add warp
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
12
17676e245515 add warp
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
13 routes path = findRoute path routeSetting
17676e245515 add warp
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
14
17676e245515 add warp
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
15 findRoute path [] = notFound
17676e245515 add warp
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
16 findRoute path ((p,f):xs)
17676e245515 add warp
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 | path == p = f
17676e245515 add warp
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
18 | otherwise = findRoute path xs
17676e245515 add warp
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
19
17676e245515 add warp
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 routeSetting = [(["hello"], hello),
17676e245515 add warp
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
21 (["hello","world"], world)]
17676e245515 add warp
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
22
17676e245515 add warp
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
23 notFound _ = return $
17676e245515 add warp
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 responseLBS status404 [("Content-type", "text/html")] $ "404"
17676e245515 add warp
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
25
17676e245515 add warp
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
26 hello _ = return $
17676e245515 add warp
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
27 responseLBS status200 [("Content-type", "text/html")] $ "hello"
17676e245515 add warp
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
28
17676e245515 add warp
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
29 world counter = do
17676e245515 add warp
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
30 count <- lift $ incCount counter
17676e245515 add warp
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
31 return $ responseLBS status200 [("Content-type", "text/html")] $
17676e245515 add warp
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
32 fromString $ show count
17676e245515 add warp
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
33
17676e245515 add warp
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 incCount counter = atomicModifyIORef counter (\c -> (c+1, c))
17676e245515 add warp
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
35
17676e245515 add warp
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
36 main = do
17676e245515 add warp
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
37 counter <- newIORef 0
17676e245515 add warp
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
38 run 3000 $ application counter