{-# LANGUAGE OverloadedStrings #-}
module Main where
import System.Environment (getArgs)
import qualified Network.HTTP.Client as HC
import Network.HTTP.Client.TLS (tlsManagerSettings)
import qualified Data.ByteString.Lazy as LBS
import Data.Monoid ((<>))
import qualified Data.Aeson as AE
import Network.SakuraIO.Platform.Message
main :: IO ()
main = do
httpManager <- HC.newManager tlsManagerSettings
ep:mid:ch:tname:value:_ <- getArgs
case tname of
xs | elem xs ["i","I","l","L","f","d","b"] ->
let msg = case tname of
"i" -> ICChannels mid [ICChannel (read ch) (CVInt32 (read value))]
"I" -> ICChannels mid [ICChannel (read ch) (CVWord32 (read value))]
"l" -> ICChannels mid [ICChannel (read ch) (CVInt64 (read value))]
"L" -> ICChannels mid [ICChannel (read ch) (CVWord64 (read value))]
"f" -> ICChannels mid [ICChannel (read ch) (CVFloat (read value))]
"d" -> ICChannels mid [ICChannel (read ch) (CVDouble (read value))]
"b" -> ICChannels mid [ICChannel (read ch) (CVBytes (read value))] -- [TODO]
in LBS.putStr =<< sendMessage httpManager ep msg
_ -> do
putStrLn "sakuraio-platform-demo-http-client"
putStrLn ""
putStrLn "Usage: sakuraio-platform-demo-http-client-exe [endpoint] [module] [channel] [type] [value]"
putStrLn ""
putStrLn "Avaliable type:"
putStrLn "\ti: signed 32 bit integer"
putStrLn "\tI: unsigned 32 bit integer"
putStrLn "\tl: signed 64 bit integer"
putStrLn "\tL: unsigned 64 bit integer"
putStrLn "\tf: float"
putStrLn "\td: double"
putStrLn "\tb: byte array"
sendMessage :: HC.Manager -> String -> InComingMessage -> IO LBS.ByteString
sendMessage man ep msg = do
req <- HC.parseRequest $ "https://api.sakura.io/incoming/v1/" <> ep
let req' = req {HC.method = "POST", HC.requestBody = HC.RequestBodyLBS $ AE.encode msg}
res <- HC.httpLbs req' man
return $ HC.responseBody res
-- for repl
sendMessage' :: String -> InComingMessage -> IO LBS.ByteString
sendMessage' ep msg =
HC.newManager tlsManagerSettings >>= \man -> sendMessage man ep msg