summaryrefslogtreecommitdiff
path: root/fig-monitor-bullfrog/src/Fig/Monitor/Bullfrog.hs
blob: 1b0f42c4165825622d6669ae7e47a42b1e2c9645 (plain)
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 QuasiQuotes #-}
{-# Language RecordWildCards #-}
{-# Language ApplicativeDo #-}

module Fig.Monitor.Bullfrog
  ( bullfrogClient
  ) where

import Fig.Prelude

import qualified Data.Text as Text

import qualified Wuss as WS
import qualified Network.WebSockets.Connection as WS

import Fig.Utils.SExpr
import Fig.Bus.SExpr.Client
import Fig.Monitor.Bullfrog.Utils

bullfrogClient :: Config -> (Text, Text) -> IO ()
bullfrogClient cfg busAddr = do
  WS.runSecureClient "colonq.computer" 443 ("/bullfrog/api/channel/broadcast?token=" <> Text.unpack cfg.authToken) \conn -> do
    busClient busAddr
      (\cmds -> do
          log "Connected to bus and broadcast server"
          cmds.subscribe [sexp|(monitor bullfrog broadcast)|]
      )
      (\_cmds d -> do
          case d of
            SExprList [ev, SExprString msg]
              | ev == [sexp|(monitor bullfrog broadcast)|] -> do
                  log $ "Broadcasting message: " <> msg
                  WS.sendTextData conn msg
            _ -> log $ "Invalid incoming message: " <> tshow d
      )
      (pure ())