module Hails.Network where
import Data.String (fromString)
import Data.List
import Data.ReactiveValue
import Network.BSD
import Network.Socket
import Network.Socket.ByteString (sendTo)
udpSink :: HostName -> String -> IO (ReactiveFieldWrite IO String)
udpSink hostname port = do
addrinfos <- getAddrInfo Nothing (Just hostname) (Just port)
let serveraddr = head addrinfos
sock <- socket (addrFamily serveraddr) Datagram defaultProtocol
let sendstr :: String -> IO ()
sendstr [] = return ()
sendstr omsg = do let bsMsg = fromString omsg
sent <- sendTo sock bsMsg (addrAddress serveraddr)
sendstr (genericDrop sent omsg)
return $ ReactiveFieldWrite sendstr