packages feed

pusher-http-haskell-0.1.0.0: example/api/Main.hs

module Main where

import Control.Monad.Pusher (PusherT, runPusherT)
import qualified Data.HashSet as HS
import qualified Data.Pusher as P
import qualified Data.Yaml as Y
import qualified Network.Pusher as P
import qualified Network.Pusher.Protocol as P

main :: IO ()
main = do
  eitherCred <- Y.decodeFileEither "example/credentials.yaml"
  case eitherCred of
    Right cred -> do
      pusher <- P.getPusher cred
      result <- runPusherT pusherApp pusher
      case result of
        Right (channels, channel, users) -> do
          print $ "Channels info: " ++ show channels
          print $ "Channel info: " ++ show channel
          print $ "Userss info: " ++ show users
        Left e -> print e
    Left e -> print e

pusherApp :: PusherT IO (P.ChannelsInfo, P.FullChannelInfo, P.Users)
pusherApp = do
  let chan = P.Channel P.Presence "messages"
  P.trigger [chan] "some_event" "data" Nothing
  channels <- P.channels
    (Just P.Presence)
    ""
    (P.ChannelsInfoQuery (HS.singleton P.ChannelsUserCount))
  channel <- P.channel
    chan
    (P.ChannelInfoQuery
      (HS.fromList [P.ChannelUserCount, P.ChannelSubscriptionCount]))
  users <- P.users chan
  return (channels, channel, users)