sbp2udp-0.0.1: sbp2udp.hs
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE OverloadedStrings #-}
import BasicPrelude
import Control.Monad.Trans.Resource
import Data.Binary
import Data.ByteString.Lazy
import Data.Conduit
import Data.Conduit.Binary
import qualified Data.Conduit.List as CL
import Data.Conduit.Network.UDP
import Data.Conduit.Serialization.Binary
import Data.Streaming.Network
import Network.Socket
import Options.Generic
import SwiftNav.SBP
import System.IO
data Args = Args
{ host :: String
, port :: Int
} deriving (Generic)
instance ParseRecord Args
convert :: AddrInfo -> SBPMsg -> Message
convert addr sm =
Message (toStrict $ encode sm) (addrAddress addr)
main :: IO ()
main = do
args <- getRecord "sbp2udp"
(sock, addr) <- getSocketUDP (host args) (port args)
runResourceT $
sourceHandle stdin =$=
conduitDecode =$=
CL.map (convert addr) $$
sinkToSocket sock