gameServer/ServerState.hs
author nemo
Sat, 29 Nov 2014 09:39:35 -0500
changeset 10569 a960f529d4bc
parent 10460 8dcea9087d75
child 11046 47a8c19ecb60
permissions -rw-r--r--
merge
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
10460
8dcea9087d75 Added copyrights to gameServer directory
Gianfranco Costamagna <costamagnagianfranco@yahoo.it>
parents: 9973
diff changeset
     1
{-
8dcea9087d75 Added copyrights to gameServer directory
Gianfranco Costamagna <costamagnagianfranco@yahoo.it>
parents: 9973
diff changeset
     2
 * Hedgewars, a free turn based strategy game
8dcea9087d75 Added copyrights to gameServer directory
Gianfranco Costamagna <costamagnagianfranco@yahoo.it>
parents: 9973
diff changeset
     3
 * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
8dcea9087d75 Added copyrights to gameServer directory
Gianfranco Costamagna <costamagnagianfranco@yahoo.it>
parents: 9973
diff changeset
     4
 *
8dcea9087d75 Added copyrights to gameServer directory
Gianfranco Costamagna <costamagnagianfranco@yahoo.it>
parents: 9973
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
8dcea9087d75 Added copyrights to gameServer directory
Gianfranco Costamagna <costamagnagianfranco@yahoo.it>
parents: 9973
diff changeset
     6
 * it under the terms of the GNU General Public License as published by
8dcea9087d75 Added copyrights to gameServer directory
Gianfranco Costamagna <costamagnagianfranco@yahoo.it>
parents: 9973
diff changeset
     7
 * the Free Software Foundation; version 2 of the License
8dcea9087d75 Added copyrights to gameServer directory
Gianfranco Costamagna <costamagnagianfranco@yahoo.it>
parents: 9973
diff changeset
     8
 *
8dcea9087d75 Added copyrights to gameServer directory
Gianfranco Costamagna <costamagnagianfranco@yahoo.it>
parents: 9973
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
8dcea9087d75 Added copyrights to gameServer directory
Gianfranco Costamagna <costamagnagianfranco@yahoo.it>
parents: 9973
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
8dcea9087d75 Added copyrights to gameServer directory
Gianfranco Costamagna <costamagnagianfranco@yahoo.it>
parents: 9973
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
8dcea9087d75 Added copyrights to gameServer directory
Gianfranco Costamagna <costamagnagianfranco@yahoo.it>
parents: 9973
diff changeset
    12
 * GNU General Public License for more details.
8dcea9087d75 Added copyrights to gameServer directory
Gianfranco Costamagna <costamagnagianfranco@yahoo.it>
parents: 9973
diff changeset
    13
 *
8dcea9087d75 Added copyrights to gameServer directory
Gianfranco Costamagna <costamagnagianfranco@yahoo.it>
parents: 9973
diff changeset
    14
 * You should have received a copy of the GNU General Public License
8dcea9087d75 Added copyrights to gameServer directory
Gianfranco Costamagna <costamagnagianfranco@yahoo.it>
parents: 9973
diff changeset
    15
 * along with this program; if not, write to the Free Software
8dcea9087d75 Added copyrights to gameServer directory
Gianfranco Costamagna <costamagnagianfranco@yahoo.it>
parents: 9973
diff changeset
    16
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
8dcea9087d75 Added copyrights to gameServer directory
Gianfranco Costamagna <costamagnagianfranco@yahoo.it>
parents: 9973
diff changeset
    17
 \-}
8dcea9087d75 Added copyrights to gameServer directory
Gianfranco Costamagna <costamagnagianfranco@yahoo.it>
parents: 9973
diff changeset
    18
3458
11cd56019f00 Make some more protocol commands work
unc0rr
parents:
diff changeset
    19
module ServerState
11cd56019f00 Make some more protocol commands work
unc0rr
parents:
diff changeset
    20
    (
11cd56019f00 Make some more protocol commands work
unc0rr
parents:
diff changeset
    21
    module RoomsAndClients,
9973
7589978c9912 Stub for joins monitor which is a replacement to plain ban for 10 seconds system after join
unc0rr
parents: 8452
diff changeset
    22
    module JoinsMonitor,
3458
11cd56019f00 Make some more protocol commands work
unc0rr
parents:
diff changeset
    23
    clientRoomA,
11cd56019f00 Make some more protocol commands work
unc0rr
parents:
diff changeset
    24
    ServerState(..),
3501
a3159a410e5c Reimplement more core actions
unc0rr
parents: 3458
diff changeset
    25
    client's,
3502
ad38c653b7d9 Some more progress
unc0rr
parents: 3501
diff changeset
    26
    allClientsS,
8452
170afc3ac39f Also rooms per version stats
unc0rr
parents: 8371
diff changeset
    27
    allRoomsS,
4601
08ae94dd4c0d io = liftIO
unc0rr
parents: 3807
diff changeset
    28
    roomClientsS,
6541
08ed346ed341 Send full room info on room add and update events. Less(?) traffic, but current frontend doesn't behave good with this change to server.
unc0rr
parents: 4989
diff changeset
    29
    sameProtoClientsS,
4601
08ae94dd4c0d io = liftIO
unc0rr
parents: 3807
diff changeset
    30
    io
3458
11cd56019f00 Make some more protocol commands work
unc0rr
parents:
diff changeset
    31
    ) where
11cd56019f00 Make some more protocol commands work
unc0rr
parents:
diff changeset
    32
3741
73246d25dfe1 Add some more strictness, use unsafeThaw and unsafeFreeze functions which work at O(1)
unc0rr
parents: 3645
diff changeset
    33
import Control.Monad.State.Strict
6541
08ed346ed341 Send full room info on room add and update events. Less(?) traffic, but current frontend doesn't behave good with this change to server.
unc0rr
parents: 4989
diff changeset
    34
import Data.Set as Set(Set)
08ed346ed341 Send full room info on room add and update events. Less(?) traffic, but current frontend doesn't behave good with this change to server.
unc0rr
parents: 4989
diff changeset
    35
import Data.Word
3458
11cd56019f00 Make some more protocol commands work
unc0rr
parents:
diff changeset
    36
----------------------
11cd56019f00 Make some more protocol commands work
unc0rr
parents:
diff changeset
    37
import RoomsAndClients
11cd56019f00 Make some more protocol commands work
unc0rr
parents:
diff changeset
    38
import CoreTypes
9973
7589978c9912 Stub for joins monitor which is a replacement to plain ban for 10 seconds system after join
unc0rr
parents: 8452
diff changeset
    39
import JoinsMonitor
3458
11cd56019f00 Make some more protocol commands work
unc0rr
parents:
diff changeset
    40
4989
4771fed9272e - Write server config into .ini file on change
unc0rr
parents: 4975
diff changeset
    41
data ServerState = ServerState {
3807
7e4f7ed41790 zero span is undefined, use -1 instead
unc0rr
parents: 3741
diff changeset
    42
        clientIndex :: !(Maybe ClientIndex),
4989
4771fed9272e - Write server config into .ini file on change
unc0rr
parents: 4975
diff changeset
    43
        serverInfo :: !ServerInfo,
3807
7e4f7ed41790 zero span is undefined, use -1 instead
unc0rr
parents: 3741
diff changeset
    44
        removedClients :: !(Set.Set ClientIndex),
9973
7589978c9912 Stub for joins monitor which is a replacement to plain ban for 10 seconds system after join
unc0rr
parents: 8452
diff changeset
    45
        roomsClients :: !MRnC,
7589978c9912 Stub for joins monitor which is a replacement to plain ban for 10 seconds system after join
unc0rr
parents: 8452
diff changeset
    46
        joinsMonitor :: !JoinsMonitor
3458
11cd56019f00 Make some more protocol commands work
unc0rr
parents:
diff changeset
    47
    }
11cd56019f00 Make some more protocol commands work
unc0rr
parents:
diff changeset
    48
11cd56019f00 Make some more protocol commands work
unc0rr
parents:
diff changeset
    49
4989
4771fed9272e - Write server config into .ini file on change
unc0rr
parents: 4975
diff changeset
    50
clientRoomA :: StateT ServerState IO RoomIndex
3458
11cd56019f00 Make some more protocol commands work
unc0rr
parents:
diff changeset
    51
clientRoomA = do
11cd56019f00 Make some more protocol commands work
unc0rr
parents:
diff changeset
    52
    (Just ci) <- gets clientIndex
11cd56019f00 Make some more protocol commands work
unc0rr
parents:
diff changeset
    53
    rnc <- gets roomsClients
4622
8bdc879ee6b2 Implement room delegation when admin lefts it
unc0rr
parents: 4601
diff changeset
    54
    io $ clientRoomM rnc ci
3458
11cd56019f00 Make some more protocol commands work
unc0rr
parents:
diff changeset
    55
4989
4771fed9272e - Write server config into .ini file on change
unc0rr
parents: 4975
diff changeset
    56
client's :: (ClientInfo -> a) -> StateT ServerState IO a
3501
a3159a410e5c Reimplement more core actions
unc0rr
parents: 3458
diff changeset
    57
client's f = do
3458
11cd56019f00 Make some more protocol commands work
unc0rr
parents:
diff changeset
    58
    (Just ci) <- gets clientIndex
11cd56019f00 Make some more protocol commands work
unc0rr
parents:
diff changeset
    59
    rnc <- gets roomsClients
4622
8bdc879ee6b2 Implement room delegation when admin lefts it
unc0rr
parents: 4601
diff changeset
    60
    io $ client'sM rnc f ci
3645
c0b3f1bb9316 Reimplement REMOVE_TEAM
unc0rr
parents: 3566
diff changeset
    61
4989
4771fed9272e - Write server config into .ini file on change
unc0rr
parents: 4975
diff changeset
    62
allClientsS :: StateT ServerState IO [ClientInfo]
3502
ad38c653b7d9 Some more progress
unc0rr
parents: 3501
diff changeset
    63
allClientsS = gets roomsClients >>= liftIO . clientsM
ad38c653b7d9 Some more progress
unc0rr
parents: 3501
diff changeset
    64
8452
170afc3ac39f Also rooms per version stats
unc0rr
parents: 8371
diff changeset
    65
allRoomsS :: StateT ServerState IO [RoomInfo]
170afc3ac39f Also rooms per version stats
unc0rr
parents: 8371
diff changeset
    66
allRoomsS = gets roomsClients >>= liftIO . roomsM
170afc3ac39f Also rooms per version stats
unc0rr
parents: 8371
diff changeset
    67
4989
4771fed9272e - Write server config into .ini file on change
unc0rr
parents: 4975
diff changeset
    68
roomClientsS :: RoomIndex -> StateT ServerState IO [ClientInfo]
3502
ad38c653b7d9 Some more progress
unc0rr
parents: 3501
diff changeset
    69
roomClientsS ri = do
ad38c653b7d9 Some more progress
unc0rr
parents: 3501
diff changeset
    70
    rnc <- gets roomsClients
4622
8bdc879ee6b2 Implement room delegation when admin lefts it
unc0rr
parents: 4601
diff changeset
    71
    io $ roomClientsM rnc ri
4601
08ae94dd4c0d io = liftIO
unc0rr
parents: 3807
diff changeset
    72
6541
08ed346ed341 Send full room info on room add and update events. Less(?) traffic, but current frontend doesn't behave good with this change to server.
unc0rr
parents: 4989
diff changeset
    73
sameProtoClientsS :: Word16 -> StateT ServerState IO [ClientInfo]
08ed346ed341 Send full room info on room add and update events. Less(?) traffic, but current frontend doesn't behave good with this change to server.
unc0rr
parents: 4989
diff changeset
    74
sameProtoClientsS p = liftM f allClientsS
08ed346ed341 Send full room info on room add and update events. Less(?) traffic, but current frontend doesn't behave good with this change to server.
unc0rr
parents: 4989
diff changeset
    75
    where
08ed346ed341 Send full room info on room add and update events. Less(?) traffic, but current frontend doesn't behave good with this change to server.
unc0rr
parents: 4989
diff changeset
    76
        f = filter (\c -> clientProto c == p)
8371
0551b5c3de9a - Start work on checker
unc0rr
parents: 6541
diff changeset
    77
4989
4771fed9272e - Write server config into .ini file on change
unc0rr
parents: 4975
diff changeset
    78
io :: IO a -> StateT ServerState IO a
4601
08ae94dd4c0d io = liftIO
unc0rr
parents: 3807
diff changeset
    79
io = liftIO