gameServer/hedgewars-server.hs
author unc0rr
Wed, 23 Feb 2011 18:38:11 +0300
changeset 4957 3684faf5b3d1
parent 4932 f11d80bac7ed
child 4960 3b54b1c9b768
permissions -rw-r--r--
Remove deprecated statistics MVar

{-# LANGUAGE CPP, ScopedTypeVariables, OverloadedStrings #-}

module Main where

import Network.Socket
import Network.BSD
import Control.Concurrent.Chan
import qualified Control.Exception as Exception
import System.Log.Logger
-----------------------------------
import Opts
import CoreTypes
import ServerCore
#if defined(OFFICIAL_SERVER)
import Utils
#endif


#if !defined(mingw32_HOST_OS)
import System.Posix
#endif


setupLoggers :: IO ()
setupLoggers =
    updateGlobalLogger "Clients"
        (setLevel INFO)

main :: IO ()
main = withSocketsDo $ do
#if !defined(mingw32_HOST_OS)
    _ <- installHandler sigPIPE Ignore Nothing
    _ <- installHandler sigCHLD Ignore Nothing
#endif

    setupLoggers

    dbQueriesChan <- newChan
    coreChan' <- newChan
    serverInfo' <- getOpts $ newServerInfo coreChan' dbQueriesChan

#if defined(OFFICIAL_SERVER)
    dbHost' <- askFromConsole "DB host: "
    dbLogin' <- askFromConsole "login: "
    dbPassword' <- askFromConsole "password: "
    let serverInfo = serverInfo'{dbHost = dbHost', dbLogin = dbLogin', dbPassword = dbPassword'}
#else
    let serverInfo = serverInfo'
#endif


    proto <- getProtocolNumber "tcp"
    Exception.bracket
        (socket AF_INET Stream proto)
        sClose
        (\sock -> do
            setSocketOption sock ReuseAddr 1
            bindSocket sock (SockAddrInet (listenPort serverInfo) iNADDR_ANY)
            listen sock maxListenQueue
            startServer serverInfo sock
        )