Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- module Main where
- import Network.Socket hiding (send, sendTo, recv, recvFrom)
- import Network.Socket.ByteString
- import qualified Data.ByteString.Lazy as LBS
- import qualified Data.ByteString as BS
- import Text.ProtocolBuffers.WireMessage (messageGet)
- import AddressBookProtos.Person
- main :: IO ()
- main = do
- withSocketsDo $ do
- sock <- socket AF_INET Datagram 0
- bindSocket sock (SockAddrInet 4567 iNADDR_ANY)
- socketRx sock
- mesgToPerson :: LBS.ByteString -> Either String (Person, LBS.ByteString)
- mesgToPerson mesg = messageGet mesg
- strictToLazyBS :: BS.ByteString -> LBS.ByteString
- strictToLazyBS x = LBS.fromChunks [x]
- socketRx :: Socket -> IO ()
- socketRx sock = do
- putStrLn "waiting for packet"
- (mesg, _) <- Network.Socket.ByteString.recvFrom sock 1500
- putStrLn "received packet"
- putStrLn "-------------------"
- putStrLn $ show mesg
- putStrLn "-------------------"
- let eitherPerson = mesgToPerson (strictToLazyBS mesg)
- case eitherPerson of
- Right (person, _) -> putStrLn $ show person
- Left err -> (putStrLn "Failed to parse.") >> (putStrLn err)
- putStrLn "-------------------"
- socketRx sock
Add Comment
Please, Sign In to add comment