forked from ocharles/snaplet-socketio
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathExample.hs
36 lines (27 loc) · 1.06 KB
/
Example.hs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TemplateHaskell #-}
module Main where
import Control.Applicative
import Control.Eff
import Control.Eff.Lift
import Control.Lens.TH
import qualified Data.Aeson as Aeson
import qualified Snap.Http.Server.Config as Snap
import qualified Snap.Snaplet as Snap
import qualified Snap.Snaplet.SocketIO as SocketIO
import qualified Snap.Util.FileServe as Snap
import qualified Snap.CORS as CORS
data App = App { _socketIO :: Snap.Snaplet SocketIO.SocketIO }
makeLenses ''App
initApp = Snap.makeSnaplet "app" "app" Nothing $ do
Snap.addRoutes [ ("/socket.io.js", Snap.serveFile "node_modules/socket.io-client/dist/socket.io.js")
, ("/", Snap.serveFile "example.html")
]
CORS.wrapCORS
App <$> Snap.nestSnaplet "socket.io" socketIO (SocketIO.init connectionHandler)
connectionHandler = do
SocketIO.emit "news" (Aeson.object [ "foo" Aeson..= ("bar" :: String) ])
SocketIO.on "my other event" $ \v ->
lift (print (v :: Aeson.Value))
main :: IO ()
main = Snap.serveSnaplet Snap.defaultConfig initApp