Guest User

Untitled

a guest
Oct 20th, 2018
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.28 KB | None | 0 0
  1. module Main where
  2.  
  3. import Network.Socket hiding (send, sendTo, recv, recvFrom)
  4. import Network.Socket.ByteString
  5. import qualified Data.ByteString.Lazy as LBS
  6. import qualified Data.ByteString as BS
  7. import Text.ProtocolBuffers.WireMessage (messageGet)
  8.  
  9. import AddressBookProtos.Person
  10.  
  11. main :: IO ()
  12. main = do
  13. withSocketsDo $ do
  14. sock <- socket AF_INET Datagram 0
  15. bindSocket sock (SockAddrInet 4567 iNADDR_ANY)
  16. socketRx sock
  17.  
  18. mesgToPerson :: LBS.ByteString -> Either String (Person, LBS.ByteString)
  19. mesgToPerson mesg = messageGet mesg
  20.  
  21. strictToLazyBS :: BS.ByteString -> LBS.ByteString
  22. strictToLazyBS x = LBS.fromChunks [x]
  23.  
  24. socketRx :: Socket -> IO ()
  25. socketRx sock = do
  26. putStrLn "waiting for packet"
  27. (mesg, _) <- Network.Socket.ByteString.recvFrom sock 1500
  28. putStrLn "received packet"
  29. putStrLn "-------------------"
  30. putStrLn $ show mesg
  31. putStrLn "-------------------"
  32. let eitherPerson = mesgToPerson (strictToLazyBS mesg)
  33. case eitherPerson of
  34. Right (person, _) -> putStrLn $ show person
  35. Left err -> (putStrLn "Failed to parse.") >> (putStrLn err)
  36. putStrLn "-------------------"
  37. socketRx sock
Add Comment
Please, Sign In to add comment