getMsg :: Handle -> IO PeerMsg
getMsg h = do
  lBS <- hGet h 4
  let l = bsToInt lBS
  if l == 0
    then return KeepAliveMsg
    else do
    putStrLn $ "len: " ++ show l
    msgID <- hGet h 1
    putStrLn $ "msg Type: " ++ show msgID
    msg <- hGet h (l - 1)
    return $ decode $ fromStrict $ concat [lBS, msgID, msg]
getMsg :: Handle -> IO PeerMsg
getMsg h = do
  lBS <- hGet h 4
  let l = bsToInt lBS
  if l == 0
    then return KeepAliveMsg
    else do
    putStrLn $ "len: " ++ show l
    msgID <- hGet h 1
    putStrLn $ "msg Type: " ++ show msgID
    msg <- hGet h (l - 1)
    return $ decode $ fromStrict $ concat [lBS, msgID, msg]
getMsg h = do
  lBS <- hGet h 4
  let l = bsToInt lBS
  if l == 0
    then return KeepAliveMsg
    else do
    putStrLn $ "len: " ++ show l
    msgID <- hGet h 1
    putStrLn $ "msg Type: " ++ show msgID
    msg <- hGet h (l - 1)
    return $ decode $ fromStrict $ concat [lBS, msgID, msg]