diff -r 21dd1def5aaf -r 0eab727d4717 gameServer/CoreTypes.hs --- a/gameServer/CoreTypes.hs Wed Feb 02 09:05:48 2011 +0100 +++ b/gameServer/CoreTypes.hs Wed Feb 02 11:28:38 2011 +0300 @@ -1,106 +1,101 @@ +{-# LANGUAGE OverloadedStrings #-} module CoreTypes where import System.IO +import Control.Concurrent import Control.Concurrent.Chan import Control.Concurrent.STM import Data.Word import qualified Data.Map as Map -import qualified Data.IntMap as IntMap import qualified Data.IntSet as IntSet import Data.Sequence(Seq, empty) import Data.Time import Network import Data.Function +import Data.ByteString.Char8 as B +import RoomsAndClients + +type ClientChan = Chan [B.ByteString] data ClientInfo = ClientInfo { - clientUID :: !Int, - sendChan :: Chan [String], - clientHandle :: Handle, - host :: String, + sendChan :: ClientChan, + clientSocket :: Socket, + host :: B.ByteString, connectTime :: UTCTime, - nick :: String, - webPassword :: String, + nick :: B.ByteString, + webPassword :: B.ByteString, logonPassed :: Bool, clientProto :: !Word16, - roomID :: !Int, + roomID :: RoomIndex, pingsQueue :: !Word, isMaster :: Bool, - isReady :: Bool, + isReady :: !Bool, isAdministrator :: Bool, - clientClan :: String, + clientClan :: B.ByteString, teamsInGame :: Word } instance Show ClientInfo where - show ci = show (clientUID ci) - ++ " nick: " ++ (nick ci) - ++ " host: " ++ (host ci) + show ci = " nick: " ++ (unpack $ nick ci) ++ " host: " ++ (unpack $ host ci) instance Eq ClientInfo where - (==) = (==) `on` clientHandle + (==) = (==) `on` clientSocket data HedgehogInfo = - HedgehogInfo String String + HedgehogInfo B.ByteString B.ByteString data TeamInfo = TeamInfo { - teamownerId :: !Int, - teamowner :: String, - teamname :: String, - teamcolor :: String, - teamgrave :: String, - teamfort :: String, - teamvoicepack :: String, - teamflag :: String, + teamownerId :: ClientIndex, + teamowner :: B.ByteString, + teamname :: B.ByteString, + teamcolor :: B.ByteString, + teamgrave :: B.ByteString, + teamfort :: B.ByteString, + teamvoicepack :: B.ByteString, + teamflag :: B.ByteString, difficulty :: Int, hhnum :: Int, hedgehogs :: [HedgehogInfo] } instance Show TeamInfo where - show ti = "owner: " ++ (teamowner ti) - ++ "name: " ++ (teamname ti) - ++ "color: " ++ (teamcolor ti) + show ti = "owner: " ++ (unpack $ teamowner ti) + ++ "name: " ++ (unpack $ teamname ti) + ++ "color: " ++ (unpack $ teamcolor ti) data RoomInfo = RoomInfo { - roomUID :: !Int, - masterID :: !Int, - name :: String, - password :: String, + masterID :: ClientIndex, + name :: B.ByteString, + password :: B.ByteString, roomProto :: Word16, teams :: [TeamInfo], gameinprogress :: Bool, playersIn :: !Int, readyPlayers :: !Int, - playersIDs :: IntSet.IntSet, isRestrictedJoins :: Bool, isRestrictedTeams :: Bool, - roundMsgs :: Seq String, - leftTeams :: [String], + roundMsgs :: Seq B.ByteString, + leftTeams :: [B.ByteString], teamsAtStart :: [TeamInfo], - params :: Map.Map String [String] + params :: Map.Map B.ByteString [B.ByteString] } instance Show RoomInfo where - show ri = show (roomUID ri) - ++ ", players ids: " ++ show (IntSet.size $ playersIDs ri) - ++ ", players: " ++ show (playersIn ri) + show ri = ", players: " ++ show (playersIn ri) ++ ", ready: " ++ show (readyPlayers ri) ++ ", teams: " ++ show (teams ri) -instance Eq RoomInfo where - (==) = (==) `on` roomUID - +newRoom :: RoomInfo newRoom = ( RoomInfo - 0 - 0 + undefined "" "" 0 @@ -108,7 +103,6 @@ False 0 0 - IntSet.empty False False Data.Sequence.empty @@ -128,15 +122,15 @@ ServerInfo { isDedicated :: Bool, - serverMessage :: String, - serverMessageForOldVersions :: String, + serverMessage :: B.ByteString, + serverMessageForOldVersions :: B.ByteString, latestReleaseVersion :: Word16, listenPort :: PortNumber, nextRoomID :: Int, - dbHost :: String, - dbLogin :: String, - dbPassword :: String, - lastLogins :: [(String, (UTCTime, String))], + dbHost :: B.ByteString, + dbLogin :: B.ByteString, + dbPassword :: B.ByteString, + lastLogins :: [(B.ByteString, UTCTime)], stats :: TMVar StatisticsInfo, coreChan :: Chan CoreMessage, dbQueries :: Chan DBQuery @@ -145,12 +139,13 @@ instance Show ServerInfo where show _ = "Server Info" +newServerInfo :: TMVar StatisticsInfo -> Chan CoreMessage -> Chan DBQuery -> ServerInfo newServerInfo = ( ServerInfo True "

http://www.hedgewars.org/

" - "

Hedgewars 0.9.15 is out! Please update.

Download page here" - 37 + "

Hedgewars 0.9.14.1 is out! Please update.

Download page here" + 35 46631 0 "" @@ -160,29 +155,35 @@ ) data AccountInfo = - HasAccount String Bool + HasAccount B.ByteString Bool | Guest | Admin deriving (Show, Read) data DBQuery = - CheckAccount Int String String + CheckAccount ClientIndex B.ByteString B.ByteString | ClearCache | SendStats Int Int deriving (Show, Read) data CoreMessage = Accept ClientInfo - | ClientMessage (Int, [String]) - | ClientAccountInfo (Int, AccountInfo) + | ClientMessage (ClientIndex, [B.ByteString]) + | ClientAccountInfo (ClientIndex, AccountInfo) | TimerAction Int - -type Clients = IntMap.IntMap ClientInfo -type Rooms = IntMap.IntMap RoomInfo + | Remove ClientIndex ---type ClientsTransform = [ClientInfo] -> [ClientInfo] ---type RoomsTransform = [RoomInfo] -> [RoomInfo] ---type HandlesSelector = ClientInfo -> [ClientInfo] -> [RoomInfo] -> [ClientInfo] ---type Answer = ServerInfo -> (HandlesSelector, [String]) +instance Show CoreMessage where + show (Accept _) = "Accept" + show (ClientMessage _) = "ClientMessage" + show (ClientAccountInfo _) = "ClientAccountInfo" + show (TimerAction _) = "TimerAction" + show (Remove _) = "Remove" -type ClientsSelector = Clients -> Rooms -> [Int] +type MRnC = MRoomsAndClients RoomInfo ClientInfo +type IRnC = IRoomsAndClients RoomInfo ClientInfo + +data Notice = + NickAlreadyInUse + | AdminLeft + deriving Enum \ No newline at end of file