@@ -21,7 +21,7 @@ import Control.Concurrent (forkIO, threadDelay)
21import qualified Control.Concurrent.MVar as M
21import qualified Control.Concurrent.MVar as M
22import qualified Control.Concurrent.Chan as C
22import qualified Control.Concurrent.Chan as C
23import System.Directory (getModificationTime)
23import System.Directory (getModificationTime)
24−import Network.Wai.Handler.SimpleServer (parseRequest, sendResponse)
24+import Network.Wai.Handler.Warp (parseRequest, sendResponse, drainRequestBody)
25import Control.Monad (filterM)
25import Control.Monad (filterM)
27import Control.Arrow ((&&&))
27import Control.Arrow ((&&&))
@@ -62,8 +62,10 @@ startApp queue withApp = do
63 onErr :: SomeException -> IO Response
63 onErr :: SomeException -> IO Response
64 onErr e = return
64 onErr e = return
65− $ Response status500 [("Content-Type", "text/plain; charset=utf-8")]
67+ [("Content-Type", "text/plain; charset=utf-8")]
66− $ ResponseLBS $ encodeUtf8 $ pack
68+ $ charsToLBS
67 $ "Exception thrown while running application\n\n" ++ show e
69 $ "Exception thrown while running application\n\n" ++ show e
68 void x = x >> return ()
70 void x = x >> return ()
@@ -155,15 +157,18 @@ swapApp app mqueue = do
156loadingApp :: Maybe SomeException -> Handler
158loadingApp :: Maybe SomeException -> Handler
157loadingApp err f =
159loadingApp err f =
158− f $ const $ return $ Response status200
160+ f $ const $ return $ responseLBS status200
159 ( ("Content-Type", "text/plain")
161 ( ("Content-Type", "text/plain")
160 : case err of
162 : case err of
161 Nothing -> [("Refresh", "1")]
163 Nothing -> [("Refresh", "1")]
162 Just _ -> []
164 Just _ -> []
163− ) $ ResponseLBS $ L8.pack $ toMessage err
165+ ) $ toMessage err
165 toMessage Nothing = "Loading code changes, please wait"
167 toMessage Nothing = "Loading code changes, please wait"
166− toMessage (Just err') = "Error loading code: " ++ show err'
168+ toMessage (Just err') = charsToLBS $ "Error loading code: " ++ show err'
170+charsToLBS :: String -> L8.ByteString
171+charsToLBS = encodeUtf8 . pack
168type Handler = (Application -> IO ()) -> IO ()
173type Handler = (Application -> IO ()) -> IO ()
@@ -198,10 +203,13 @@ type Queue = C.Chan (Maybe (Request, Response -> IO ()))
199serveConnection :: Port -> M.MVar Queue -> Handle -> String -> IO ()
204serveConnection :: Port -> M.MVar Queue -> Handle -> String -> IO ()
200serveConnection port mqueue conn remoteHost' = do
205serveConnection port mqueue conn remoteHost' = do
201− env <- parseRequest port conn remoteHost'
206+ (ilen, env) <- parseRequest port conn remoteHost'
202 let onRes res =
207 let onRes res =
204− (sendResponse (httpVersion env) conn res)
210+ _ <- sendResponse env (httpVersion env) conn res
211+ drainRequestBody conn ilen
205 (hClose conn)
213 (hClose conn)
206 queue <- M.readMVar mqueue
214 queue <- M.readMVar mqueue
207 C.writeChan queue $ Just (env, onRes)
215 C.writeChan queue $ Just (env, onRes)