34 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			Haskell
		
	
	
	
	
	
			
		
		
	
	
			34 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			Haskell
		
	
	
	
	
	
-- | Main module for the database server
 | 
						|
module Main where
 | 
						|
 | 
						|
import           BlogDB              (initialBlogState)
 | 
						|
import           Control.Applicative (pure, (<$>), (<*>))
 | 
						|
import           Control.Exception   (bracket)
 | 
						|
import           Data.Acid
 | 
						|
import           Data.Acid.Local     (createCheckpointAndClose)
 | 
						|
import           Data.Acid.Remote
 | 
						|
import           Data.Word
 | 
						|
import           Network             (PortID (..))
 | 
						|
import           Options
 | 
						|
 | 
						|
data DBOptions = DBOptions {
 | 
						|
  dbPort         :: Word16,
 | 
						|
  stateDirectory :: String
 | 
						|
}
 | 
						|
 | 
						|
instance Options DBOptions where
 | 
						|
  defineOptions = pure DBOptions
 | 
						|
    <*> simpleOption "dbport" 8070
 | 
						|
        "Port to serve acid-state on remotely."
 | 
						|
    <*> simpleOption "state" "/var/tazblog/state"
 | 
						|
        "Directory in which the acid-state is located."
 | 
						|
 | 
						|
main :: IO ()
 | 
						|
main = do
 | 
						|
    putStrLn ("Launching TazBlog database server ...")
 | 
						|
    runCommand $ \opts args ->
 | 
						|
      bracket (openState opts) createCheckpointAndClose
 | 
						|
              (acidServer skipAuthenticationCheck $ getPort opts)
 | 
						|
  where
 | 
						|
    openState o = openLocalStateFrom (stateDirectory o) initialBlogState
 | 
						|
    getPort = PortNumber . fromIntegral . dbPort
 |