- Pass unknown chat commands to server
authorunc0rr
Thu, 17 Jan 2013 23:17:39 +0400
changeset 8396 5123eac2f9d6
parent 8395 0b357c57e01c
child 8397 5b273af3ac95
- Pass unknown chat commands to server - Make server recognize /delegate command
QTfrontend/hwform.cpp
QTfrontend/net/newnetclient.cpp
QTfrontend/net/newnetclient.h
QTfrontend/ui/widget/chatwidget.cpp
QTfrontend/ui/widget/chatwidget.h
gameServer/Actions.hs
gameServer/HWProtoCore.hs
gameServer/Utils.hs
project_files/hedgewars.pro
--- a/QTfrontend/hwform.cpp	Thu Jan 17 18:12:30 2013 +0100
+++ b/QTfrontend/hwform.cpp	Thu Jan 17 23:17:39 2013 +0400
@@ -1266,6 +1266,8 @@
             hwnet, SLOT(infoPlayer(const QString&)));
     connect(ui.pageRoomsList->chatWidget, SIGNAL(follow(const QString&)),
             hwnet, SLOT(followPlayer(const QString&)));
+    connect(ui.pageRoomsList->chatWidget, SIGNAL(consoleCommand(const QString&)),
+            hwnet, SLOT(consoleCommand(const QString&)));
 
 // chatting
     connect(ui.pageRoomsList->chatWidget, SIGNAL(chatLine(const QString&)),
--- a/QTfrontend/net/newnetclient.cpp	Thu Jan 17 18:12:30 2013 +0100
+++ b/QTfrontend/net/newnetclient.cpp	Thu Jan 17 23:17:39 2013 +0400
@@ -926,6 +926,11 @@
     }
 }
 
+void HWNewNet::consoleCommand(const QString & cmd)
+{
+    RawSendNet(QString("CMD%1%2").arg(delimeter).arg(cmd));
+}
+
 void HWNewNet::startGame()
 {
     RawSendNet(QString("START_GAME"));
--- a/QTfrontend/net/newnetclient.h	Thu Jan 17 18:12:30 2013 +0100
+++ b/QTfrontend/net/newnetclient.h	Thu Jan 17 23:17:39 2013 +0400
@@ -155,6 +155,7 @@
         void kickPlayer(const QString &);
         void infoPlayer(const QString &);
         void followPlayer(const QString &);
+        void consoleCommand(const QString &);
         void startGame();
         void toggleRestrictJoins();
         void toggleRestrictTeamAdds();
--- a/QTfrontend/ui/widget/chatwidget.cpp	Thu Jan 17 18:12:30 2013 +0100
+++ b/QTfrontend/ui/widget/chatwidget.cpp	Thu Jan 17 23:17:39 2013 +0400
@@ -798,11 +798,7 @@
         else if (tline == "/saveStyleSheet")
             saveStyleSheet();
         else
-        {
-            static QRegExp post("\\s.*$");
-            tline.remove(post);
-            displayWarning(tr("%1 is not a valid command!").arg(tline));
-        }
+            emit consoleCommand(tline.mid(1));
 
         return true;
     }
--- a/QTfrontend/ui/widget/chatwidget.h	Thu Jan 17 18:12:30 2013 +0100
+++ b/QTfrontend/ui/widget/chatwidget.h	Thu Jan 17 23:17:39 2013 +0400
@@ -100,6 +100,7 @@
         void info(const QString & str);
         void follow(const QString &);
         void nickCountUpdate(int cnt);
+        void consoleCommand(const QString & command);
 
     private:
         bool m_isAdmin;
--- a/gameServer/Actions.hs	Thu Jan 17 18:12:30 2013 +0100
+++ b/gameServer/Actions.hs	Thu Jan 17 23:17:39 2013 +0400
@@ -459,7 +459,7 @@
     isBanned = do
         processAction $ CheckBanned False
         liftM B.null $ client's nick
-    checkerLogin p False = processAction $ ByeClient "No checker rights"
+    checkerLogin _ False = processAction $ ByeClient "No checker rights"
     checkerLogin p True = do
         wp <- client's webPassword
         processAction $
--- a/gameServer/HWProtoCore.hs	Thu Jan 17 18:12:30 2013 +0100
+++ b/gameServer/HWProtoCore.hs	Thu Jan 17 23:17:39 2013 +0400
@@ -4,6 +4,7 @@
 import Control.Monad.Reader
 import Data.Maybe
 import qualified Data.ByteString.Char8 as B
+import qualified Data.List as L
 --------------------------------------
 import CoreTypes
 import Actions
@@ -32,6 +33,16 @@
         else
         return [ModifyClient (\c -> c{pingsQueue = pingsQueue c - 1})]
 
+handleCmd ("CMD" : params) =
+    let c = concatMap B.words params in
+        if not $ null c then
+            h $ (upperCase . head $ c) : tail c
+            else
+            return []
+    where
+        h ["DELEGATE", n] = handleCmd ["DELEGATE", n]
+        h c = return [Warning . B.concat . L.intersperse " " $ "Unknown cmd" : c]
+
 handleCmd cmd = do
     (ci, irnc) <- ask
     if logonPassed (irnc `client` ci) then
--- a/gameServer/Utils.hs	Thu Jan 17 18:12:30 2013 +0100
+++ b/gameServer/Utils.hs	Thu Jan 17 23:17:39 2013 +0400
@@ -118,10 +118,10 @@
 cutHost = B.intercalate "." .  flip (++) ["*","*"] . List.take 2 . B.split '.'
 
 caseInsensitiveCompare :: B.ByteString -> B.ByteString -> Bool
-caseInsensitiveCompare a b = f a == f b
-    where
-        f = map Char.toUpper . UTF8.toString
+caseInsensitiveCompare a b = upperCase a == upperCase b
 
+upperCase :: B.ByteString -> B.ByteString
+upperCase = UTF8.fromString . map Char.toUpper . UTF8.toString
 
 roomInfo :: B.ByteString -> RoomInfo -> [B.ByteString]
 roomInfo n r = [
--- a/project_files/hedgewars.pro	Thu Jan 17 18:12:30 2013 +0100
+++ b/project_files/hedgewars.pro	Thu Jan 17 23:17:39 2013 +0400
@@ -92,7 +92,6 @@
     ../QTfrontend/hwconsts.h \
     ../QTfrontend/sdlkeys.h \
     ../QTfrontend/ui/mouseoverfilter.h \
-    ../QTfrontend/ui/qpushbuttonwithsound.h \
     ../QTfrontend/ui/widget/qpushbuttonwithsound.h \
     ../QTfrontend/ui/page/pagefeedback.h \
     ../QTfrontend/model/roomslistmodel.h \