# HG changeset patch # User unc0rr # Date 1223490308 0 # Node ID d7dc4e86201e9021d139dabb03b5d66d4479ebf5 # Parent bffc7262e25e203dc5d14507056bfaab88e8c8d7 - Add protocol description (just started) - Some work on server to make team add posiible diff -r bffc7262e25e -r d7dc4e86201e QTfrontend/newnetclient.cpp --- a/QTfrontend/newnetclient.cpp Wed Oct 08 15:57:35 2008 +0000 +++ b/QTfrontend/newnetclient.cpp Wed Oct 08 18:25:08 2008 +0000 @@ -61,7 +61,7 @@ { if(netClientState != 2) { - qDebug("Illegal try to create room!"); + qWarning("Illegal try to create room!"); return; } @@ -73,7 +73,7 @@ { if(netClientState != 2) { - qDebug("Illegal try to join room!"); + qWarning("Illegal try to join room!"); return; } @@ -242,19 +242,19 @@ return; } - if (lst[0] == "ADDTEAM:") { - if(lst.size() < 22) - { - qWarning("Net: Too short ADDTEAM message"); - return; - } - QStringList tmp = lst; - tmp.removeFirst(); - emit AddNetTeam(tmp); - return; - } + if (lst[0] == "ADDTEAM") { + if(lst.size() < 22) + { + qWarning("Net: Too short ADDTEAM message"); + return; + } + QStringList tmp = lst; + tmp.removeFirst(); + emit AddNetTeam(tmp); + return; + } - if (lst[0] == "REMOVETEAM:") { + if (lst[0] == "REMOVETEAM") { if(lst.size() < 3) { qWarning("Net: Bad REMOVETEAM message"); @@ -410,16 +410,16 @@ void HWNewNet::onHedgehogsNumChanged(const HWTeam& team) { - RawSendNet(QString("HHNUM%1%2%1%3%1%4").arg(delimeter).arg(team.TeamName)\ - .arg(team.getNetID() ? team.getNetID() : m_networkToLocalteams.key(team.TeamName))\ - .arg(team.numHedgehogs)); + RawSendNet(QString("HHNUM%1%2%1%3%1%4").arg(delimeter).arg(team.TeamName) + .arg(team.getNetID() ? team.getNetID() : m_networkToLocalteams.key(team.TeamName)) + .arg(team.numHedgehogs)); } void HWNewNet::onTeamColorChanged(const HWTeam& team) { - RawSendNet(QString("CONFIG_PARAM%1TEAM_COLOR+%2+%3%1%4").arg(delimeter).arg(team.TeamName)\ - .arg(team.getNetID() ? team.getNetID() : m_networkToLocalteams.key(team.TeamName))\ - .arg(team.teamColor.name())); + RawSendNet(QString("CONFIG_PARAM%1TEAM_COLOR+%2+%3%1%4").arg(delimeter).arg(team.TeamName) + .arg(team.getNetID() ? team.getNetID() : m_networkToLocalteams.key(team.TeamName)) + .arg(team.teamColor.name())); } void HWNewNet::onSeedChanged(const QString & seed) @@ -469,7 +469,7 @@ { if(netClientState != 2) { - qDebug("Illegal try to get rooms list!"); + qWarning("Illegal try to get rooms list!"); return; } RawSendNet(QString("LIST")); diff -r bffc7262e25e -r d7dc4e86201e doc/Protocol.dia Binary file doc/Protocol.dia has changed diff -r bffc7262e25e -r d7dc4e86201e doc/Protocol.odt Binary file doc/Protocol.odt has changed diff -r bffc7262e25e -r d7dc4e86201e netserver/HWProto.hs --- a/netserver/HWProto.hs Wed Oct 08 15:57:35 2008 +0000 +++ b/netserver/HWProto.hs Wed Oct 08 18:25:08 2008 +0000 @@ -27,7 +27,7 @@ answerConfigParam paramName paramStrs = [(othersInRoom, "CONFIG_PARAM" : paramName : paramStrs)] answerFullConfig room = map toAnswer (Map.toList $ params room) where - toAnswer (paramName, paramStrs)= + toAnswer (paramName, paramStrs) = (clientOnly, "CONFIG_PARAM" : paramName : paramStrs) -- Main state-independent cmd handler @@ -95,14 +95,14 @@ handleCmd_noRoom client clients rooms ["JOIN", roomName, roomPassword] = if noSuchRoom then (noChangeClients, noChangeRooms, answerNoRoom) - else if roomPassword /= password joinRoom then + else if roomPassword /= password clRoom then (noChangeClients, noChangeRooms, answerWrongPassword) else - (modifyClient client{room = roomName}, noChangeRooms, (answerJoined $ nick client) ++ answerNicks ++ answerFullConfig joinRoom) + (modifyClient client{room = roomName}, noChangeRooms, (answerJoined $ nick client) ++ answerNicks ++ answerFullConfig clRoom) where noSuchRoom = isNothing $ find (\room -> roomName == name room) rooms answerNicks = [(clientOnly, ["JOINED"] ++ (map nick $ filter (\ci -> room ci == roomName) clients))] - joinRoom = roomByName roomName rooms + clRoom = roomByName roomName rooms handleCmd_noRoom client clients rooms ["JOIN", roomName] = handleCmd_noRoom client clients rooms ["JOIN", roomName, ""] @@ -115,10 +115,16 @@ handleCmd_inRoom client _ _ ["CHAT_STRING", _, msg] = (noChangeClients, noChangeRooms, answerChatString (nick client) msg) -handleCmd_inRoom client _ _ ("CONFIG_PARAM":paramName:paramStrs) = +handleCmd_inRoom client _ rooms ("CONFIG_PARAM":paramName:paramStrs) = if isMaster client then - (noChangeClients, changeRoomConfig (room client) paramName paramStrs, answerConfigParam paramName paramStrs) + (noChangeClients, modifyRoom clRoom{params = Map.insert paramName paramStrs (params room)}, answerConfigParam paramName paramStrs) else (noChangeClients, noChangeRooms, answerNotMaster) + where + clRoom = roomByName (room client) rooms + + +handleCmd_inRoom client _ _ ("ADDTEAM" : name : color : grave : fort : difStr : hhsInfo) + | length hhsInfo == 16 = (noChangeClients, noChangeRooms, answerBadCmd) handleCmd_inRoom _ _ _ _ = (noChangeClients, noChangeRooms, answerBadCmd) diff -r bffc7262e25e -r d7dc4e86201e netserver/Miscutils.hs --- a/netserver/Miscutils.hs Wed Oct 08 15:57:35 2008 +0000 +++ b/netserver/Miscutils.hs Wed Oct 08 18:25:08 2008 +0000 @@ -29,6 +29,10 @@ TeamInfo { teamname :: String, + teamcolor :: String, + teamgrave :: String, + teamfort :: String, + difficulty :: Int, hedgehogs :: [HedgehogInfo] } @@ -82,6 +86,7 @@ noChangeClients a = a modifyClient :: ClientInfo -> ClientsTransform +modifyClient _ [] = error "modifyClient: no such client" modifyClient client (cl:cls) = if cl == client then client : cls @@ -97,10 +102,10 @@ removeRoom :: String -> RoomsTransform removeRoom roomname rooms = filter (\rm -> roomname /= name rm) rooms -changeRoomConfig :: String -> String -> [String] -> RoomsTransform -changeRoomConfig _ _ _ [] = error "changeRoomConfig: no such room" -changeRoomConfig roomName paramName paramStrs (room:rooms) = - if roomName == name room then - room{params = Map.insert paramName paramStrs (params room)} : rooms +modifyRoom :: RoomInfo -> RoomsTransform +modifyRoom _ [] = error "changeRoomConfig: no such room" +modifyRoom room (rm:rms) = + if name room == name rm then + room : rms else - room : changeRoomConfig roomName paramName paramStrs rooms + room : modifyRoom room rms diff -r bffc7262e25e -r d7dc4e86201e netserver/newhwserv.hs --- a/netserver/newhwserv.hs Wed Oct 08 15:57:35 2008 +0000 +++ b/netserver/newhwserv.hs Wed Oct 08 18:25:08 2008 +0000 @@ -42,7 +42,7 @@ sendAnswers [] _ clients _ = return clients sendAnswers ((handlesFunc, answer):answers) client clients rooms = do let recipients = handlesFunc client clients rooms - putStrLn ("< " ++ (show answer) ++ " (" ++ (show $ length recipients) ++ " recipients)") + putStrLn ("< " ++ (show answer)) clHandles' <- forM recipients $ \ch -> Control.Exception.handle (\e -> putStrLn (show e) >> hClose ch >> return [ch]) $