packages feed

loshadka-0.2: Network/Loshadka/Settings.hs

{-# LANGUAGE OverloadedStrings #-}

module Network.Loshadka.Settings
  (Settings, port, responses, command, readSettings) where

import Network.Loshadka.Jar
import Network.Loshadka.Message (pack)
import Network.Loshadka.Protocol
import Network.Loshadka.Properties
import Network.Loshadka.Version
import Network.Loshadka.WhiteList

import Prelude hiding (max)
import Network (PortNumber)
import Data.Aeson (encode)
import Data.List (intercalate)

data Settings = Settings { command :: String
                         , port :: PortNumber
                         , responses :: Responses }

readSettings :: String -> [String] -> IO Settings
readSettings path args = do
  j <- findJar path
  p <- readProps path
  v <- readVersion path
  w <- readWhiteList path

  let c = formCommand j args in
    return $ parse p v w c

formCommand :: String -> [String] -> String
formCommand jar args = "java " ++ intercalate " " (tail args) ++ " -jar " ++ jar ++ " nogui"

parse :: Properties -> Version -> [Player] -> String -> Settings
parse (m, p, m', _) v _ c =
  Settings { command = c
           , port = p
           , responses = Responses { ping   = pack $ encode p'
                                   , start  = pack "Restarting..."
                                   , denied = pack "Access denied" } }
  where p' = Ping { version = v
                    , players = Players { max = m', online = 0 }
                    , description = Description { text = m } }