gameServer/hedgewars-server.hs
changeset 5209 f7a610e2ef5f
parent 5119 f475e10c4081
child 10051 cc6f62d7aea2
equal deleted inserted replaced
5208:878e551f0b4a 5209:f7a610e2ef5f
     5 import Network.Socket
     5 import Network.Socket
     6 import Network.BSD
     6 import Network.BSD
     7 import Control.Concurrent.Chan
     7 import Control.Concurrent.Chan
     8 import qualified Control.Exception as E
     8 import qualified Control.Exception as E
     9 import System.Log.Logger
     9 import System.Log.Logger
    10 import System.Process
       
    11 -----------------------------------
    10 -----------------------------------
    12 import Opts
    11 import Opts
    13 import CoreTypes
    12 import CoreTypes
    14 import ServerCore
    13 import ServerCore
    15 #if defined(OFFICIAL_SERVER)
    14 #if defined(OFFICIAL_SERVER)
    20 import System.Posix
    19 import System.Posix
    21 #endif
    20 #endif
    22 
    21 
    23 
    22 
    24 setupLoggers :: IO ()
    23 setupLoggers :: IO ()
    25 setupLoggers =
    24 setupLoggers = do
    26     updateGlobalLogger "Clients"
    25     updateGlobalLogger "Clients" (setLevel NOTICE)
    27         (setLevel NOTICE)
    26     updateGlobalLogger "Core" (setLevel NOTICE)
    28 
    27 
    29 
    28 
    30 server :: ServerInfo -> IO ()
    29 server :: ServerInfo -> IO ()
    31 server si = do
    30 server si = do
    32     proto <- getProtocolNumber "tcp"
    31     proto <- getProtocolNumber "tcp"
    35         sClose
    34         sClose
    36         (\sock -> do
    35         (\sock -> do
    37             setSocketOption sock ReuseAddr 1
    36             setSocketOption sock ReuseAddr 1
    38             bindSocket sock (SockAddrInet (listenPort si) iNADDR_ANY)
    37             bindSocket sock (SockAddrInet (listenPort si) iNADDR_ANY)
    39             listen sock maxListenQueue
    38             listen sock maxListenQueue
    40             startServer si sock
    39             startServer si{serverSocket = Just sock}
    41         )
    40         )
    42 
    41 
    43 handleRestart :: ShutdownException -> IO ()
    42 handleRestart :: ShutdownException -> IO ()
    44 handleRestart ShutdownException = return ()
    43 handleRestart ShutdownException = do
    45 handleRestart RestartException = do
    44     noticeM "Core" "Shutting down"
    46     _ <- createProcess (proc "./hedgewars-server" [])
       
    47     return ()
    45     return ()
    48 
    46 
    49 main :: IO ()
    47 main :: IO ()
    50 main = withSocketsDo $ do
    48 main = withSocketsDo $ do
    51 #if !defined(mingw32_HOST_OS)
    49 #if !defined(mingw32_HOST_OS)
    55 
    53 
    56     setupLoggers
    54     setupLoggers
    57 
    55 
    58     dbQueriesChan <- newChan
    56     dbQueriesChan <- newChan
    59     coreChan' <- newChan
    57     coreChan' <- newChan
    60     serverInfo' <- getOpts $ newServerInfo coreChan' dbQueriesChan Nothing
    58     serverInfo' <- getOpts $ newServerInfo coreChan' dbQueriesChan Nothing Nothing
    61 
    59 
    62 #if defined(OFFICIAL_SERVER)
    60 #if defined(OFFICIAL_SERVER)
    63     si <- readServerConfig serverInfo'
    61     si <- readServerConfig serverInfo'
    64 #else
    62 #else
    65     let si = serverInfo'
    63     let si = serverInfo'