readServerInfo :: IO Word8 -> IO Int -> (Int -> IO String) -> IO Inbound.InboundMessage
readServerInfo readByte readInt readText =
  do
    permissions <- readInt
    size <- fromIntegral <$> readByte
    serverName <- readText size
    return . Inbound.ServerInfoMessage $ Inbound.ServerInfoNotification serverName permissions
    {- OpenPalace notes:
	Weird -- this message is supposed to include options and upload/download capabilities, but doesn't.
          options = socket.readUnsignedInt();
          uploadCapabilities = socket.readUnsignedInt();
          downloadCapabilities = socket.readUnsignedInt();
    -}
readServerInfo :: IO Word8 -> IO Int -> (Int -> IO String) -> IO Inbound.InboundMessage
readServerInfo readByte readInt readText =
  do
    permissions <- readInt
    size <- fromIntegral <$> readByte
    serverName <- readText size
    return . Inbound.ServerInfoMessage $ Inbound.ServerInfoNotification serverName permissions
    {- OpenPalace notes:
	Weird -- this message is supposed to include options and upload/download capabilities, but doesn't.
          options = socket.readUnsignedInt();
          uploadCapabilities = socket.readUnsignedInt();
          downloadCapabilities = socket.readUnsignedInt();
    -}
readServerInfo readByte readInt readText =
  do
    permissions <- readInt
    size <- fromIntegral <$> readByte
    serverName <- readText size
    return . Inbound.ServerInfoMessage $ Inbound.ServerInfoNotification serverName permissions
    {- OpenPalace notes:
	Weird -- this message is supposed to include options and upload/download capabilities, but doesn't.
          options = socket.readUnsignedInt();
          uploadCapabilities = socket.readUnsignedInt();
          downloadCapabilities = socket.readUnsignedInt();
    -}