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 37 38 39 40 41 42 43 44 45 46 47 48
|
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RankNTypes #-}
module Main where
import Control.Concurrent.Async
import qualified Control.Exception as E
import qualified Data.ByteString.Char8 as C8
import Network.HTTP.Types
import Network.Run.TCP (runTCPClient) -- network-run
import System.Environment
import System.Exit
import Network.HTTP2.Client
serverName :: String
serverName = "127.0.0.1"
main :: IO ()
main = do
args <- getArgs
(host, port) <- case args of
[h, p] -> return (h, p)
_ -> do
putStrLn "client <addr> <port>"
exitFailure
runTCPClient serverName port $ runHTTP2Client host
where
cliconf host = defaultClientConfig{authority = C8.pack host}
runHTTP2Client host s =
E.bracket
(allocSimpleConfig s 4096)
freeSimpleConfig
(\conf -> run (cliconf host) conf client)
client :: Client ()
client sendRequest _aux = do
let req0 = requestNoBody methodGet "/" []
client0 = sendRequest req0 $ \rsp -> do
print rsp
getResponseBodyChunk rsp >>= C8.putStrLn
req1 = requestNoBody methodGet "/foo" []
client1 = sendRequest req1 $ \rsp -> do
print rsp
getResponseBodyChunk rsp >>= C8.putStrLn
ex <- E.try $ concurrently_ client0 client1
case ex of
Left e -> print (e :: HTTP2Error)
Right () -> putStrLn "OK"
|