hedgewars/uFLNet.pas
branchqmlfrontend
changeset 11413 ffff8a0d1a76
parent 11403 b894922d58cc
child 11415 05cf35103206
--- a/hedgewars/uFLNet.pas	Mon Nov 16 22:57:24 2015 +0300
+++ b/hedgewars/uFLNet.pas	Wed Nov 18 22:18:39 2015 +0300
@@ -5,15 +5,15 @@
 
 procedure initModule;
 procedure freeModule;
+procedure sendNet(s: shortstring);
 
 implementation
-uses SDLh, uFLIPC, uFLTypes, uFLUICallback, uFLNetTypes;
+uses SDLh, uFLIPC, uFLTypes, uFLUICallback, uFLNetTypes, uFLUtils;
 
 const endCmd: string = #10 + #10;
 
 function getNextChar: char; forward;
 function getCurrChar: char; forward;
-procedure sendNet(s: shortstring); forward;
 
 type
     TNetState = (netDisconnected, netConnecting, netLoggedIn);
@@ -28,132 +28,123 @@
 
 var state: TParserState;
 
-// generated stuff here
-const letters: array[0..206] of char = ('A', 'S', 'K', 'P', 'A', 'S', 'S', 'W', 'O', 'R', 'D', #10, 'B', 'A', 'N', 'L', 'I', 'S', 'T', #10, 'Y', 'E', #10, 'C', 'H', 'A', 'T', #10, 'L', 'I', 'E', 'N', 'T', '_', 'F', 'L', 'A', 'G', 'S', #10, 'O', 'N', 'N', 'E', 'C', 'T', 'E', 'D', #10, 'E', 'M', #10, 'H', 'H', '_', 'N', 'U', 'M', #10, 'I', 'N', 'F', 'O', #10, 'J', 'O', 'I', 'N', 'E', 'D', #10, 'I', 'N', 'G', #10, 'K', 'I', 'C', 'K', 'E', 'D', #10, 'L', 'E', 'F', 'T', #10, 'O', 'B', 'B', 'Y', ':', 'J', 'O', 'I', 'N', 'E', 'D', #10, 'L', 'E', 'F', 'T', #10, 'N', 'I', 'C', 'K', #10, 'O', 'T', 'I', 'C', 'E', #10, 'P', 'I', 'N', 'G', #10, 'R', 'O', 'T', 'O', #10, 'R', 'O', 'O', 'M', 'S', #10, 'U', 'N', 'D', '_', 'F', 'I', 'N', 'I', 'S', 'H', 'E', 'D', #10, 'U', 'N', '_', 'G', 'A', 'M', 'E', #10, 'S', 'E', 'R', 'V', 'E', 'R', '_', 'A', 'U', 'T', 'H', #10, 'M', 'E', 'S', 'S', 'A', 'G', 'E', #10, 'V', 'A', 'R', 'S', #10, 'T', 'E', 'A', 'M', '_', 'A', 'C', 'C', 'E', 'P', 'T', 'E', 'D', #10, 'C', 'O', 'L', 'O', 'R', #10, 'W', 'A', 'R', 'N', 'I', 'N', 'G', #10, #0, #10);
-
-const commands: array[0..206] of integer = (12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -38, 11, 7, 0, 0, 0, 0, 0, -37, 0, 0, -36, 26, 4, 0, 0, -35, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -34, 0, 0, 0, 0, 0, 0, 0, 0, -33, 3, 0, -32, 7, 0, 0, 0, 0, 0, -31, 5, 0, 0, 0, -30, 11, 0, 0, 0, 3, 0, -29, 0, 0, 0, -28, 7, 0, 0, 0, 0, 0, -27, 22, 4, 0, 0, -26, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, -25, 0, 0, 0, 0, -24, 11, 4, 0, 0, -23, 0, 0, 0, 0, 0, -22, 10, 4, 0, 0, -21, 0, 0, 0, 0, -20, 27, 18, 4, 0, 0, -19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -18, 0, 0, 0, 0, 0, 0, 0, -17, 25, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, -16, 8, 0, 0, 0, 0, 0, 0, -15, 0, 0, 0, 0, -14, 20, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, -13, 0, 0, 0, 0, 0, -12, 8, 0, 0, 0, 0, 0, 0, -11, 0, -10);
+procedure handleTail; forward;
+function getShortString: shortstring; forward;
 
-procedure handler_ASKPASSWORD;
-begin
-end;
+// generated stuff here
+const letters: array[0..211] of char = ('A', 'S', 'K', 'P', 'A', 'S', 'S', 'W',
+    'O', 'R', 'D', #10, 'B', 'A', 'N', 'L', 'I', 'S', 'T', #10, 'Y', 'E', #10, 'C',
+    'H', 'A', 'T', #10, 'L', 'I', 'E', 'N', 'T', '_', 'F', 'L', 'A', 'G', 'S', #10,
+    'O', 'N', 'N', 'E', 'C', 'T', 'E', 'D', #10, 'E', 'M', #10, 'R', 'R', 'O', 'R',
+    #10, 'H', 'H', '_', 'N', 'U', 'M', #10, 'I', 'N', 'F', 'O', #10, 'J', 'O', 'I',
+    'N', 'E', 'D', #10, 'I', 'N', 'G', #10, 'K', 'I', 'C', 'K', 'E', 'D', #10, 'L',
+    'E', 'F', 'T', #10, 'O', 'B', 'B', 'Y', ':', 'J', 'O', 'I', 'N', 'E', 'D', #10,
+    'L', 'E', 'F', 'T', #10, 'N', 'I', 'C', 'K', #10, 'O', 'T', 'I', 'C', 'E', #10,
+    'P', 'I', 'N', 'G', #10, 'R', 'O', 'T', 'O', #10, 'R', 'O', 'O', 'M', 'S', #10,
+    'U', 'N', 'D', '_', 'F', 'I', 'N', 'I', 'S', 'H', 'E', 'D', #10, 'U', 'N', '_',
+    'G', 'A', 'M', 'E', #10, 'S', 'E', 'R', 'V', 'E', 'R', '_', 'A', 'U', 'T', 'H',
+    #10, 'M', 'E', 'S', 'S', 'A', 'G', 'E', #10, 'V', 'A', 'R', 'S', #10, 'T', 'E',
+    'A', 'M', '_', 'A', 'C', 'C', 'E', 'P', 'T', 'E', 'D', #10, 'C', 'O', 'L', 'O',
+    'R', #10, 'W', 'A', 'R', 'N', 'I', 'N', 'G', #10, #0, #10);
+const commands: array[0..211] of integer = (12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    -39, 11, 7, 0, 0, 0, 0, 0, -38, 0, 0, -37, 26, 4, 0, 0, -36, 12, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, -35, 0, 0, 0, 0, 0, 0, 0, 0, -34, 8, 2, -33, 0, 0, 0, 0, -32, 7,
+    0, 0, 0, 0, 0, -31, 5, 0, 0, 0, -30, 11, 0, 0, 0, 3, 0, -29, 0, 0, 0, -28, 7, 0,
+    0, 0, 0, 0, -27, 22, 4, 0, 0, -26, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, -25, 0, 0,
+    0, 0, -24, 11, 4, 0, 0, -23, 0, 0, 0, 0, 0, -22, 10, 4, 0, 0, -21, 0, 0, 0, 0,
+    -20, 27, 18, 4, 0, 0, -19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -18, 0, 0, 0, 0,
+    0, 0, 0, -17, 25, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, -16, 8, 0, 0, 0, 0, 0, 0, -15,
+    0, 0, 0, 0, -14, 20, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, -13, 0, 0, 0, 0, 0,
+    -12, 8, 0, 0, 0, 0, 0, 0, -11, 0, -10);
 
-procedure handler_BANLIST;
+procedure handler_;
 begin
-end;
-
-procedure handler_BYE;
-begin
-end;
-
-procedure handler_CHAT;
-begin
-end;
-
-procedure handler_CLIENT_FLAGS;
-begin
+    sendUI(mtNetData, @state.cmd, sizeof(state.cmd));
+    writeln('handler_');
+    handleTail()
 end;
 
-procedure handler_CONNECTED;
-var data: TCmdConnectedData;
+procedure handler_L;
 begin
-    sendUI(mtNetData, nil, 0);
-end;
-
-procedure handler_EM;
-begin
-end;
-
-procedure handler_HH_NUM;
-begin
+    writeln('handler_L');
+    handleTail()
 end;
 
-procedure handler_INFO;
-begin
-end;
-
-procedure handler_JOINED;
+procedure handler_ML;
 begin
-end;
-
-procedure handler_JOINING;
-begin
-end;
-
-procedure handler_KICKED;
-begin
-end;
-
-procedure handler_LEFT;
-begin
+    writeln('handler_ML');
+    handleTail()
 end;
 
-procedure handler_LOBBY_JOINED;
+procedure handler_MS;
+var cmd: TCmdParamS;
+    f: boolean;
 begin
-end;
+    sendUI(mtNetData, @state.cmd, sizeof(state.cmd));
+    writeln('handler_MS');
+    cmd.cmd:= Succ(state.cmd);
 
-procedure handler_LOBBY_LEFT;
-begin
-end;
-
-procedure handler_NICK;
-begin
+    repeat
+        cmd.str1:= getShortString;
+        f:= cmd.str1[0] <> #0;
+        if f then
+            sendUI(mtNetData, @cmd, sizeof(cmd));
+    until not f
 end;
 
-procedure handler_NOTICE;
-begin
-end;
-
-procedure handler_PING;
+procedure handler_S;
 begin
-    sendNet('PONG')
-end;
-
-procedure handler_PROTO;
-begin
-end;
-
-procedure handler_ROOMS;
-begin
+    writeln('handler_S');
+    handleTail()
 end;
 
-procedure handler_ROUND_FINISHED;
+procedure handler_SL;
 begin
+    writeln('handler_SL');
+    handleTail()
 end;
 
-procedure handler_RUN_GAME;
+procedure handler_SMS;
 begin
-end;
-
-procedure handler_SERVER_AUTH;
-begin
-end;
-
-procedure handler_SERVER_MESSAGE;
-begin
+    writeln('handler_SMS');
+    handleTail()
 end;
 
-procedure handler_SERVER_VARS;
+procedure handler__i;
+var cmd: TCmdParami;
 begin
-end;
-
-procedure handler_TEAM_ACCEPTED;
-begin
+    writeln('handler__i');
+    getShortString;
+    cmd.cmd:= state.cmd;
+    cmd.param1:= strToInt(getShortString);
+    sendUI(mtNetData, @cmd, sizeof(cmd));
+    handleTail()
 end;
 
-procedure handler_TEAM_COLOR;
+procedure handler_i;
 begin
+    writeln('handler_i');
+    handleTail()
 end;
 
-procedure handler_WARNING;
-begin
-end;
-
-procedure handler___UNKNOWN__;
+procedure handler__UNKNOWN_;
 begin
     writeln('[NET] Unknown cmd');
 end;
 
-const handlers: array[0..28] of PHandler = (@handler___UNKNOWN__, @handler_WARNING, @handler_TEAM_COLOR, @handler_TEAM_ACCEPTED, @handler_SERVER_VARS, @handler_SERVER_MESSAGE, @handler_SERVER_AUTH, @handler_RUN_GAME, @handler_ROUND_FINISHED, @handler_ROOMS, @handler_PROTO, @handler_PING, @handler_NOTICE, @handler_NICK, @handler_LOBBY_LEFT, @handler_LOBBY_JOINED, @handler_LEFT, @handler_KICKED, @handler_JOINING, @handler_JOINED, @handler_INFO, @handler_HH_NUM, @handler_EM, @handler_CONNECTED, @handler_CLIENT_FLAGS, @handler_CHAT, @handler_BYE, @handler_BANLIST, @handler_ASKPASSWORD);
+const handlers: array[0..29] of PHandler = (@handler__UNKNOWN_, @handler_L, @handler_MS, @handler_S,
+    @handler_SL, @handler_L, @handler_S, @handler_, @handler_, @handler_MS,
+    @handler_i, @handler_MS, @handler_L, @handler_S, @handler_SL, @handler_MS,
+    @handler_SMS, @handler_, @handler_S, @handler_MS, @handler_MS, @handler_MS,
+    @handler_L, @handler_ML, @handler__i, @handler_SMS, @handler_SL, @handler_SL,
+    @handler_MS, @handler_S);
+const net2cmd: array[0..29] of TCmdType = (cmd_WARNING, cmd_WARNING,
+    cmd_TEAM_COLOR, cmd_TEAM_ACCEPTED, cmd_SERVER_VARS, cmd_SERVER_MESSAGE,
+    cmd_SERVER_AUTH, cmd_RUN_GAME, cmd_ROUND_FINISHED, cmd_ROOMS, cmd_PROTO,
+    cmd_PING, cmd_NOTICE, cmd_NICK, cmd_LOBBY_LEFT, cmd_LOBBY_JOINED, cmd_LEFT,
+    cmd_KICKED, cmd_JOINING, cmd_JOINED, cmd_INFO, cmd_HH_NUM, cmd_ERROR, cmd_EM,
+    cmd_CONNECTED, cmd_CLIENT_FLAGS, cmd_CHAT, cmd_BYE, cmd_BANLIST,
+    cmd_ASKPASSWORD);
 
 
 // end of generated stuff
@@ -233,16 +224,15 @@
             if c = letters[state.l] then
                 if commands[state.l] < 0 then
                 begin
-                    state.cmd:= TCmdType(-10 - commands[state.l]);
+                    state.cmd:= net2cmd[-10 - commands[state.l]];
                     writeln('[NET] ', state.cmd);
                     handlers[-10 - commands[state.l]]();
-                    handleTail()
                 end
                 else
                     inc(state.l)
             else
             begin
-                handler___UNKNOWN__();
+                handler__UNKNOWN_();
                 handleTail()
             end
         end
@@ -259,6 +249,25 @@
     ipcToNet(s + endCmd);
 end;
 
+function getShortString: shortstring;
+var s: shortstring;
+    c: char;
+begin
+    s[0]:= #0;
+
+    repeat
+        inc(s[0]);
+        s[byte(s[0])]:= getNextChar
+    until (s[0] = #255) or (s[byte(s[0])] = #10) or (s[byte(s[0])] = #0);
+
+    if s[byte(s[0])] = #10 then
+        dec(s[0])
+    else
+        repeat c:= getNextChar until (c = #0) or (c = #10);
+
+    getShortString:= s
+end;
+
 procedure netSendCallback(p: pointer; msg: PChar; len: Longword);
 begin
     // W A R N I N G: totally thread-unsafe due to use of sock variable