mirror of
https://github.com/monadicsystems/okapi.git
synced 2024-11-25 05:36:21 +03:00
45 lines
1.3 KiB
Haskell
45 lines
1.3 KiB
Haskell
|
{-# LANGUAGE BlockArguments #-}
|
||
|
{-# LANGUAGE DataKinds #-}
|
||
|
{-# LANGUAGE OverloadedStrings #-}
|
||
|
{-# LANGUAGE TypeApplications #-}
|
||
|
|
||
|
module Main where
|
||
|
|
||
|
import qualified Control.Concurrent as Concurrent
|
||
|
import qualified Control.Concurrent.Chan as Chan
|
||
|
import Control.Monad
|
||
|
import qualified Data.Binary.Builder as Builder
|
||
|
import qualified Data.Text as Text
|
||
|
import qualified Network.HTTP.Types as HTTP
|
||
|
import qualified Network.Wai as Wai
|
||
|
import qualified Network.Wai.EventSource as Wai
|
||
|
import qualified Network.Wai.Handler.Warp as Warp
|
||
|
import Okapi.App
|
||
|
import Okapi.Response
|
||
|
import qualified Web.HttpApiData as Web
|
||
|
|
||
|
ticker :: Chan.Chan Wai.ServerEvent -> Node '[]
|
||
|
ticker source =
|
||
|
choice
|
||
|
[ lit "connect" $ events source
|
||
|
]
|
||
|
|
||
|
tick source = do
|
||
|
let event =
|
||
|
Wai.ServerEvent
|
||
|
{ Wai.eventName = Nothing
|
||
|
, Wai.eventId = Nothing
|
||
|
, Wai.eventData = [Builder.putStringUtf8 "tick"]
|
||
|
}
|
||
|
forever do
|
||
|
Concurrent.threadDelay (1 * (10 ^ 6))
|
||
|
print "Sending"
|
||
|
Chan.writeChan source event
|
||
|
|
||
|
main = do
|
||
|
source <- Chan.newChan
|
||
|
Concurrent.forkIO $ tick source
|
||
|
Warp.run 8003
|
||
|
. withDefault (ticker source)
|
||
|
$ \_ resp -> resp $ Wai.responseLBS HTTP.status404 [] "Not Found..."
|