@@ -0,0 +1,32 @@
1+{-# LANGUAGE OverloadedStrings #-}
2+module Obelisk.Widget.Run where
3+
4+import Data.ByteString (ByteString)
5+import Language.Javascript.JSaddle.WebSockets
6+import Language.Javascript.JSaddle.Run (syncPoint)
7+import Network.HTTP.Client (defaultManagerSettings, newManager, Manager)
8+import qualified Network.HTTP.ReverseProxy as RP
9+import Network.Wai (Application)
10+import Network.Wai.Handler.Warp (defaultSettings, setTimeout, setPort, runSettings)
11+import Network.WebSockets.Connection (defaultConnectionOptions)
12+import Reflex.Dom.Core
13+
14+test :: IO ()
15+test = do
16+ runWidget $ do
17+ text "hello world"
18+ elAttr "img" ("src" =: "/obelisk.jpg") $ return ()
19+
20+runWidget :: Widget () () -> IO ()
21+runWidget w = do
22+ man <- newManager defaultManagerSettings
23+ let port = 3003 -- TODO
24+ redirectHost = "0.0.0.0"
25+ redirectPort = 38383
26+ runSettings (setPort port (setTimeout 3600 defaultSettings)) =<<
27+ jsaddleWithAppOr defaultConnectionOptions (mainWidget' w >> syncPoint) (fallbackProxy redirectHost redirectPort man)
28+
29+fallbackProxy :: ByteString -> Int -> Manager -> Application
30+fallbackProxy host port = RP.waiProxyTo handleRequest RP.defaultOnExc
31+ where handleRequest _req = return $ RP.WPRProxyDest $ RP.ProxyDest host port
32+