equal
deleted
inserted
replaced
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' |