gameServer/Actions.hs
branchserver_refactor
changeset 4604 831a4b91e9bc
parent 4601 08ae94dd4c0d
child 4606 4c521c4ab2b6
equal deleted inserted replaced
4601:08ae94dd4c0d 4604:831a4b91e9bc
    78     let message = if protonum < latestReleaseVersion si then
    78     let message = if protonum < latestReleaseVersion si then
    79             serverMessageForOldVersions si
    79             serverMessageForOldVersions si
    80             else
    80             else
    81             serverMessage si
    81             serverMessage si
    82     processAction $ AnswerClients [chan] ["SERVER_MESSAGE", message]
    82     processAction $ AnswerClients [chan] ["SERVER_MESSAGE", message]
    83 {-
    83 
    84 
    84 
    85 processAction (clID, serverInfo, rnc) SendServerVars = do
    85 processAction SendServerVars = do
    86     writeChan (sendChan $ clients ! clID) ("SERVER_VARS" : vars)
    86     chan <- client's sendChan
    87     return (clID, serverInfo, rnc)
    87     si <- gets serverInfo
    88     where
    88     io $ writeChan chan ("SERVER_VARS" : vars si)
    89         client = clients ! clID
    89     where
    90         vars = [
    90         vars si = [
    91             "MOTD_NEW", serverMessage serverInfo,
    91             "MOTD_NEW", serverMessage si,
    92             "MOTD_OLD", serverMessageForOldVersions serverInfo,
    92             "MOTD_OLD", serverMessageForOldVersions si,
    93             "LATEST_PROTO", show $ latestReleaseVersion serverInfo
    93             "LATEST_PROTO", B.pack . show $ latestReleaseVersion si
    94             ]
    94             ]
    95 
    95 
    96 
       
    97 -}
       
    98 
    96 
    99 processAction (ProtocolError msg) = do
    97 processAction (ProtocolError msg) = do
   100     chan <- client's sendChan
    98     chan <- client's sendChan
   101     processAction $ AnswerClients [chan] ["ERROR", msg]
    99     processAction $ AnswerClients [chan] ["ERROR", msg]
   102 
   100 
   109     (Just ci) <- gets clientIndex
   107     (Just ci) <- gets clientIndex
   110     rnc <- gets roomsClients
   108     rnc <- gets roomsClients
   111     ri <- clientRoomA
   109     ri <- clientRoomA
   112 
   110 
   113     chan <- client's sendChan
   111     chan <- client's sendChan
       
   112     clNick <- client's nick
   114 
   113 
   115     when (ri /= lobbyId) $ do
   114     when (ri /= lobbyId) $ do
   116         processAction $ MoveToLobby ("quit: " `B.append` msg)
   115         processAction $ MoveToLobby ("quit: " `B.append` msg)
   117         return ()
   116         return ()
   118 
   117 
       
   118     clientsChans <- liftM (Prelude.map sendChan . Prelude.filter logonPassed) $! allClientsS
   119     io $ do
   119     io $ do
   120         infoM "Clients" (show ci ++ " quits: " ++ (B.unpack msg))
   120         infoM "Clients" (show ci ++ " quits: " ++ (B.unpack msg))
   121 
   121 
   122         --mapM_ (processAction (ci, serverInfo, rnc)) $ answerOthersQuit ++ answerInformRoom
       
   123 
       
   124     processAction $ AnswerClients [chan] ["BYE", msg]
   122     processAction $ AnswerClients [chan] ["BYE", msg]
       
   123     processAction $ AnswerClients clientsChans ["LOBBY:LEFT", clNick, msg]
   125 
   124 
   126     s <- get
   125     s <- get
   127     put $! s{removedClients = ci `Set.insert` removedClients s}
   126     put $! s{removedClients = ci `Set.insert` removedClients s}
   128 
   127 
   129 processAction (DeleteClient ci) = do
   128 processAction (DeleteClient ci) = do
   131     io $ removeClient rnc ci
   130     io $ removeClient rnc ci
   132 
   131 
   133     s <- get
   132     s <- get
   134     put $! s{removedClients = ci `Set.delete` removedClients s}
   133     put $! s{removedClients = ci `Set.delete` removedClients s}
   135 
   134 
   136 {-
       
   137     where
       
   138         client = clients ! clID
       
   139         clientNick = nick client
       
   140         answerInformRoom =
       
   141             if roomID client /= 0 then
       
   142                 if not $ Prelude.null msg then
       
   143                     [AnswerThisRoom ["LEFT", clientNick, msg]]
       
   144                 else
       
   145                     [AnswerThisRoom ["LEFT", clientNick]]
       
   146             else
       
   147                 []
       
   148         answerOthersQuit =
       
   149             if logonPassed client then
       
   150                 if not $ Prelude.null msg then
       
   151                     [AnswerAll ["LOBBY:LEFT", clientNick, msg]]
       
   152                 else
       
   153                     [AnswerAll ["LOBBY:LEFT", clientNick]]
       
   154             else
       
   155             [] 
       
   156 -}
       
   157 
       
   158 processAction (ModifyClient f) = do
   135 processAction (ModifyClient f) = do
   159     (Just ci) <- gets clientIndex
   136     (Just ci) <- gets clientIndex
   160     rnc <- gets roomsClients
   137     rnc <- gets roomsClients
   161     io $ modifyClient rnc f ci
   138     io $ modifyClient rnc f ci
   162     return ()
   139     return ()
   171     rnc <- gets roomsClients
   148     rnc <- gets roomsClients
   172     ri <- clientRoomA
   149     ri <- clientRoomA
   173     io $ modifyRoom rnc f ri
   150     io $ modifyRoom rnc f ri
   174     return ()
   151     return ()
   175 
   152 
   176 {-
   153 
   177 
   154 processAction (ModifyServerInfo f) =
   178 processAction (clID, serverInfo, rnc) (ModifyServerInfo func) =
   155     modify (\s -> s{serverInfo = f $ serverInfo s})
   179     return (clID, func serverInfo, rnc)
   156 
   180 
       
   181 -}
       
   182 
   157 
   183 processAction (MoveToRoom ri) = do
   158 processAction (MoveToRoom ri) = do
   184     (Just ci) <- gets clientIndex
   159     (Just ci) <- gets clientIndex
   185     rnc <- gets roomsClients
   160     rnc <- gets roomsClients
   186 
   161