hedgewars/uFLNetProtocol.pas
branchqmlfrontend
changeset 12861 95d903b976d0
parent 12860 1b2b84315d27
child 12862 90f927b4b9e1
--- a/hedgewars/uFLNetProtocol.pas	Sun Dec 17 00:09:24 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,598 +0,0 @@
-unit uFLNetProtocol;
-interface
-
-procedure passNetData(p: pointer); cdecl;
-
-procedure sendChatLine(msg: PChar); cdecl;
-procedure joinRoom(roomName: PChar); cdecl;
-procedure partRoom(msg: PChar); cdecl;
-
-procedure ResetNetState;
-
-implementation
-uses uFLNetTypes, uFLTypes, uFLUICallback, uFLNet, uFLGameConfig, uFLUtils, uFLIPC, uUtils;
-
-type
-    PHandler = procedure (var t: TCmdData);
-
-var isInRoom: boolean;
-
-procedure onRoomLeaving();
-begin
-    isInRoom:= false;
-    sendUI(mtMoveToLobby, nil, 0);
-    netResetTeams
-end;
-
-var teamIndex: LongInt;
-    tmpTeam: TTeam;
-
-const teamFields: array[0..22] of PShortstring = (
-    @tmpTeam.teamName
-    , @tmpTeam.grave
-    , @tmpTeam.fort
-    , @tmpTeam.voice
-    , @tmpTeam.flag
-    , @tmpTeam.owner
-    , nil
-    , @tmpTeam.hedgehogs[0].name
-    , @tmpTeam.hedgehogs[0].hat
-    , @tmpTeam.hedgehogs[1].name
-    , @tmpTeam.hedgehogs[1].hat
-    , @tmpTeam.hedgehogs[2].name
-    , @tmpTeam.hedgehogs[2].hat
-    , @tmpTeam.hedgehogs[3].name
-    , @tmpTeam.hedgehogs[3].hat
-    , @tmpTeam.hedgehogs[4].name
-    , @tmpTeam.hedgehogs[4].hat
-    , @tmpTeam.hedgehogs[5].name
-    , @tmpTeam.hedgehogs[5].hat
-    , @tmpTeam.hedgehogs[6].name
-    , @tmpTeam.hedgehogs[6].hat
-    , @tmpTeam.hedgehogs[7].name
-    , @tmpTeam.hedgehogs[7].hat
-    );
-
-procedure handler_ADD_TEAM(var p: TCmdParam);
-begin
-    teamIndex:= 0;
-    tmpTeam.color:= 0
-end;
-
-procedure handler_ADD_TEAM_s(var s: TCmdParamS);
-begin
-    if teamIndex = 6 then
-        tmpTeam.botLevel:= strToInt(s.str1)
-    else if teamIndex < 23 then
-        teamFields[teamIndex]^:= s.str1;
-
-    if teamIndex = 22 then
-        netAddTeam(tmpTeam);
-
-    inc(teamIndex);
-end;
-
-procedure handler_ASKPASSWORD(var p: TCmdParamS);
-begin
-end;
-
-procedure handler_BANLIST(var p: TCmdParam);
-begin
-end;
-
-procedure handler_BANLIST_s(var s: TCmdParamS);
-begin
-end;
-
-procedure handler_BYE(var p: TCmdParamSL);
-begin
-    sendUI(mtDisconnected, @p.str2[1], length(p.str2));
-end;
-
-procedure handler_CFG_AMMO(var p: TCmdParamSL);
-begin
-    netSetAmmo(p.str1, p.str2)
-end;
-
-procedure handler_CFG_DRAWNMAP(var p: TCmdParamL);
-begin
-    netDrawnData(copy(ansistring(p.str1), 1, p.str1len))
-end;
-
-procedure handler_CFG_FEATURE_SIZE(var p: TCmdParami);
-begin
-    if isInRoom then
-    begin
-        netSetFeatureSize(p.param1);
-        updatePreviewIfNeeded
-    end;
-end;
-
-var fmcfgIndex: integer;
-
-procedure handler_CFG_FULLMAPCONFIG(var p: TCmdParam);
-begin
-    fmcfgIndex:= 0;
-end;
-
-procedure handler_CFG_FULLMAPCONFIG_s(var s: TCmdParamS);
-begin
-    if not isInRoom then exit;
-
-    inc(fmcfgIndex);
-    case fmcfgIndex of
-        1: netSetFeatureSize(strToInt(s.str1));
-        2: if s.str1[0] <> '+' then netSetMap(s.str1);
-        3: netSetMapGen(strToInt(s.str1));
-        4: netSetMazeSize(strToInt(s.str1));
-        5: netSetSeed(s.str1);
-        6: begin
-                netSetTemplate(strToInt(s.str1));
-                updatePreviewIfNeeded;
-            end;
-    end;
-end;
-
-procedure handler_CFG_MAP(var p: TCmdParamS);
-begin
-    if isInRoom then
-        netSetMap(p.str1);
-end;
-
-procedure handler_CFG_MAPGEN(var p: TCmdParami);
-begin
-    if isInRoom then
-    begin
-        netSetMapGen(p.param1);
-        updatePreviewIfNeeded
-    end
-end;
-
-procedure handler_CFG_MAZE_SIZE(var p: TCmdParami);
-begin
-    if isInRoom then
-    begin
-        netSetMazeSize(p.param1);
-        updatePreviewIfNeeded
-    end
-end;
-
-var schemeIndex: LongInt;
-    tmpScheme: TScheme;
-
-procedure handler_CFG_SCHEME(var p: TCmdParam);
-begin
-    schemeIndex:= 0
-end;
-
-const schemeFields: array[0..43] of pointer = (
-      @tmpScheme.schemeName          //  0
-    , @tmpScheme.fortsmode           //  1
-    , @tmpScheme.divteams            //  2
-    , @tmpScheme.solidland           //  3
-    , @tmpScheme.border              //  4
-    , @tmpScheme.lowgrav             //  5
-    , @tmpScheme.laser               //  6
-    , @tmpScheme.invulnerability     //  7
-    , @tmpScheme.resethealth         //  8
-    , @tmpScheme.vampiric            //  9
-    , @tmpScheme.karma               // 10
-    , @tmpScheme.artillery           // 11
-    , @tmpScheme.randomorder         // 12
-    , @tmpScheme.king                // 13
-    , @tmpScheme.placehog            // 14
-    , @tmpScheme.sharedammo          // 15
-    , @tmpScheme.disablegirders      // 16
-    , @tmpScheme.disablelandobjects  // 17
-    , @tmpScheme.aisurvival          // 18
-    , @tmpScheme.infattack           // 19
-    , @tmpScheme.resetweps           // 20
-    , @tmpScheme.perhogammo          // 21
-    , @tmpScheme.disablewind         // 22
-    , @tmpScheme.morewind            // 23
-    , @tmpScheme.tagteam             // 24
-    , @tmpScheme.bottomborder        // 25
-    , @tmpScheme.damagefactor        // 26
-    , @tmpScheme.turntime            // 27
-    , @tmpScheme.health              // 28
-    , @tmpScheme.suddendeath         // 29
-    , @tmpScheme.caseprobability     // 30
-    , @tmpScheme.minestime           // 31
-    , @tmpScheme.minesnum            // 32
-    , @tmpScheme.minedudpct          // 33
-    , @tmpScheme.explosives          // 34
-    , @tmpScheme.airmines            // 35
-    , @tmpScheme.healthprobability   // 36
-    , @tmpScheme.healthcaseamount    // 37
-    , @tmpScheme.waterrise           // 38
-    , @tmpScheme.healthdecrease      // 39
-    , @tmpScheme.ropepct             // 40
-    , @tmpScheme.getawaytime         // 41
-    , @tmpScheme.worldedge           // 42
-    , @tmpScheme.scriptparam         // 43
-   );
-
-procedure handler_CFG_SCHEME_s(var s: TCmdParamS);
-begin
-    if(schemeIndex = 0) then
-        tmpScheme.schemeName:= s.str1
-    else
-    if(schemeIndex = 43) then
-        tmpScheme.scriptparam:= copy(s.str1, 2, length(s.str1) - 1)
-    else
-    if(schemeIndex < 26) then
-        PBoolean(schemeFields[schemeIndex])^:= s.str1[1] = 't'
-    else
-    if(schemeIndex < 43) then
-        PLongInt(schemeFields[schemeIndex])^:= strToInt(s.str1);
-
-    if(schemeIndex = 43) then
-        netSetScheme(tmpScheme);
-
-    inc(schemeIndex);
-end;
-
-procedure handler_CFG_SCRIPT(var p: TCmdParamS);
-begin
-    if isInRoom then
-        netSetScript(p.str1)
-end;
-
-procedure handler_CFG_SEED(var p: TCmdParamS);
-begin
-    if isInRoom then
-        netSetSeed(p.str1)
-end;
-
-procedure handler_CFG_TEMPLATE(var p: TCmdParami);
-begin
-    if isInRoom then
-    begin
-        netSetTemplate(p.param1);
-        updatePreviewIfNeeded
-    end
-end;
-
-procedure handler_CFG_THEME(var p: TCmdParamS);
-begin
-    if isInRoom then
-        netSetTheme(p.str1)
-end;
-
-procedure handler_CHAT(var p: TCmdParamSL);
-var s: string;
-begin
-    s:= p.str1 + #10 + copy(p.str2, 0, p.str2len);
-    if isInRoom then
-        sendUI(mtRoomChatLine, @s[1], length(s))
-    else
-        sendUI(mtLobbyChatLine, @s[1], length(s));
-end;
-
-var flags: array[TClientFlag] of LongInt;
-    isFlagsLine: boolean;
-procedure handler_CLIENT_FLAGS(var p: TCmdParamS);
-var f: TClientFlag;
-begin
-    for f:= Low(TClientFlag) to High(TClientFlag) do
-        flags[f]:= 0;
-
-    isFlagsLine:= true;
-end;
-
-procedure handler_CLIENT_FLAGS_s(var s: TCmdParamS);
-var isRemoval: boolean;
-    flagValue, i: LongInt;
-begin
-    if isFlagsLine then
-    begin
-        if s.str1[1] = '+' then flagValue:= 1 else flagValue:= -1;
-        for i:= 2 to Length(s.str1) do
-            case s.str1[1] of
-                'r': flags[cfReady]:= flagValue;
-                'u': flags[cfRegistered]:= flagValue;
-                'i': flags[cfInRoom]:= flagValue;
-                'c': flags[cfContributor]:= flagValue;
-                'g': flags[cfInGame]:= flagValue;
-                'h': flags[cfRoomAdmin]:= flagValue;
-                'a': flags[cfServerAdmin]:= flagValue;
-            end;
-
-        isFlagsLine:= false;
-    end else
-    begin
-
-    end
-end;
-
-procedure handler_CONNECTED(var p: TCmdParami);
-begin
-    sendUI(mtConnected, nil, 0);
-    //writeln('Server features version ', p.param1);
-    sendNet('PROTO' + #10 + '52');
-    sendNet('NICK' + #10 + myNickname);
-end;
-
-procedure handler_EM(var p: TCmdParam);
-begin
-end;
-
-procedure handler_EM_s(var p: TCmdParamL);
-var i, l: Longword;
-    s: shortstring;
-begin
-    i:= 1;
-    l:= length(p.str1);
-
-    while i < l do
-    begin
-        s:= DecodeBase64(copy(p.str1, i, 240));
-        ipcToEngineRaw(@s[1], byte(s[0]));
-        inc(i, 160)
-    end;
-end;
-
-procedure handler_ERROR(var p: TCmdParamL);
-begin
-    sendUI(mtError, @p.str1[1], length(p.str1));
-end;
-
-procedure handler_HH_NUM(var p: TCmdParamSS);
-begin
-    netSetHedgehogsNumber(p.str1, StrToInt(p.str2))
-end;
-
-procedure handler_INFO(var p: TCmdParam);
-begin
-end;
-
-procedure handler_INFO_s(var s: TCmdParamS);
-begin
-end;
-
-procedure handler_JOINED(var p: TCmdParam);
-begin
-end;
-
-procedure handler_JOINED_s(var s: TCmdParamS);
-begin
-    if s.str1 = myNickname then // we joined a room
-    begin
-        isInRoom:= true;
-        sendUI(mtMoveToRoom, nil, 0);
-    end;
-
-    sendUI(mtAddRoomClient, @s.str1[1], length(s.str1));
-end;
-
-procedure handler_JOINING(var p: TCmdParamS);
-begin
-end;
-
-procedure handler_KICKED(var p: TCmdParam);
-begin
-    onRoomLeaving()
-end;
-
-procedure handler_LEFT(var p: TCmdParamSL);
-var s: string;
-begin
-    s:= p.str1 + #10 + copy(p.str2, 0, p.str2len);
-    sendUI(mtRemoveRoomClient, @s[1], length(s));
-end;
-
-procedure handler_LOBBY_JOINED(var p: TCmdParam);
-begin
-end;
-
-procedure handler_LOBBY_JOINED_s(var s: TCmdParamS);
-begin
-    if s.str1 = myNickname then
-    begin
-        sendUI(mtMoveToLobby, nil, 0);
-        sendNet('LIST');
-    end;
-
-    sendUI(mtAddLobbyClient, @s.str1[1], length(s.str1));
-end;
-
-procedure handler_LOBBY_LEFT(var p: TCmdParamSL);
-var s: string;
-begin
-    s:= p.str1 + #10 + copy(p.str2, 0, p.str2len);
-    sendUI(mtRemoveLobbyClient, @s[1], length(s));
-end;
-
-procedure handler_NICK(var p: TCmdParamS);
-begin
-    myNickname:= p.str1;
-    sendUI(mtNickname, @p.str1[1], length(p.str1));
-end;
-
-procedure handler_NOTICE(var p: TCmdParamL);
-begin
-end;
-
-procedure handler_PING(var p: TCmdParam);
-begin
-    sendNet('PONG')
-end;
-
-procedure handler_PING_s(var s: TCmdParamS);
-begin
-end;
-
-procedure handler_PROTO(var p: TCmdParami);
-begin
-    //writeln('Protocol ', p.param1)
-end;
-
-procedure handler_REMOVE_TEAM(var p: TCmdParamS);
-begin
-    netRemoveTeam(p.str1)
-end;
-
-var roomInfo: string;
-    roomLinesCount: integer;
-
-procedure handler_ROOMS(var p: TCmdParam);
-begin
-    roomInfo:= '';
-    roomLinesCount:= 0
-end;
-
-procedure handler_ROOMS_s(var s: TCmdParamS);
-begin
-    roomInfo:= roomInfo + s.str1 + #10;
-
-    if roomLinesCount = 8 then
-    begin
-        sendUI(mtAddRoom, @roomInfo[1], length(roomInfo) - 1);
-        roomLinesCount:= 0;
-        roomInfo:= ''
-    end else inc(roomLinesCount);
-end;
-
-procedure handler_ROOM_ADD(var p: TCmdParam);
-begin
-    roomInfo:= '';
-    roomLinesCount:= 0
-end;
-
-procedure handler_ROOM_ADD_s(var s: TCmdParamS);
-begin
-    roomInfo:= roomInfo + s.str1 + #10;
-    inc(roomLinesCount);
-
-    if roomLinesCount = 9 then
-    begin
-        sendUI(mtAddRoom, @roomInfo[1], length(roomInfo) - 1);
-        roomInfo:= '';
-        roomLinesCount:= 0
-    end;
-end;
-
-procedure handler_ROOM_DEL(var p: TCmdParamS);
-begin
-    sendUI(mtRemoveRoom, @p.str1[1], length(p.str1));
-end;
-
-procedure handler_ROOM_UPD(var p: TCmdParam);
-begin
-    roomInfo:= '';
-    roomLinesCount:= 0
-end;
-
-procedure handler_ROOM_UPD_s(var s: TCmdParamS);
-begin
-    roomInfo:= roomInfo + s.str1 + #10;
-    inc(roomLinesCount);
-
-    if roomLinesCount = 10 then
-        sendUI(mtUpdateRoom, @roomInfo[1], length(roomInfo) - 1);
-end;
-
-procedure handler_ROUND_FINISHED(var p: TCmdParam);
-begin
-end;
-
-procedure handler_RUN_GAME(var p: TCmdParam);
-begin
-    runNetGame
-end;
-
-procedure handler_SERVER_AUTH(var p: TCmdParamS);
-begin
-end;
-
-procedure handler_SERVER_MESSAGE(var p: TCmdParamL);
-begin
-end;
-
-procedure handler_SERVER_VARS(var p: TCmdParamSL);
-begin
-end;
-
-procedure handler_TEAM_ACCEPTED(var p: TCmdParamS);
-begin
-    netAcceptedTeam(p.str1)
-end;
-
-procedure handler_TEAM_COLOR(var p: TCmdParamSS);
-begin
-    netSetTeamColor(p.str1, StrToInt(p.str2));
-end;
-
-procedure handler_WARNING(var p: TCmdParamL);
-begin
-    sendUI(mtWarning, @p.str1[1], length(p.str1));
-end;
-
-const handlers: array[TCmdType] of PHandler = (PHandler(@handler_ADD_TEAM),
-    PHandler(@handler_ADD_TEAM_s), PHandler(@handler_ASKPASSWORD),
-    PHandler(@handler_BANLIST), PHandler(@handler_BANLIST_s),
-    PHandler(@handler_BYE), PHandler(@handler_CFG_AMMO),
-    PHandler(@handler_CFG_DRAWNMAP), PHandler(@handler_CFG_FEATURE_SIZE),
-    PHandler(@handler_CFG_FULLMAPCONFIG), PHandler(@handler_CFG_FULLMAPCONFIG_s),
-    PHandler(@handler_CFG_MAP), PHandler(@handler_CFG_MAPGEN),
-    PHandler(@handler_CFG_MAZE_SIZE), PHandler(@handler_CFG_SCHEME),
-    PHandler(@handler_CFG_SCHEME_s), PHandler(@handler_CFG_SCRIPT),
-    PHandler(@handler_CFG_SEED), PHandler(@handler_CFG_TEMPLATE),
-    PHandler(@handler_CFG_THEME), PHandler(@handler_CHAT),
-    PHandler(@handler_CLIENT_FLAGS), PHandler(@handler_CLIENT_FLAGS_s),
-    PHandler(@handler_CONNECTED), PHandler(@handler_EM), PHandler(@handler_EM_s),
-    PHandler(@handler_ERROR), PHandler(@handler_HH_NUM), PHandler(@handler_INFO),
-    PHandler(@handler_INFO_s), PHandler(@handler_JOINED),
-    PHandler(@handler_JOINED_s), PHandler(@handler_JOINING),
-    PHandler(@handler_KICKED), PHandler(@handler_LEFT),
-    PHandler(@handler_LOBBY_JOINED), PHandler(@handler_LOBBY_JOINED_s),
-    PHandler(@handler_LOBBY_LEFT), PHandler(@handler_NICK),
-    PHandler(@handler_NOTICE), PHandler(@handler_PING), PHandler(@handler_PING_s),
-    PHandler(@handler_PROTO), PHandler(@handler_REMOVE_TEAM),
-    PHandler(@handler_ROOMS), PHandler(@handler_ROOMS_s),
-    PHandler(@handler_ROOM_ADD), PHandler(@handler_ROOM_ADD_s),
-    PHandler(@handler_ROOM_DEL), PHandler(@handler_ROOM_UPD),
-    PHandler(@handler_ROOM_UPD_s), PHandler(@handler_ROUND_FINISHED),
-    PHandler(@handler_RUN_GAME), PHandler(@handler_SERVER_AUTH),
-    PHandler(@handler_SERVER_MESSAGE), PHandler(@handler_SERVER_VARS),
-    PHandler(@handler_TEAM_ACCEPTED), PHandler(@handler_TEAM_COLOR),
-    PHandler(@handler_WARNING));
-
-procedure passNetData(p: pointer); cdecl;
-begin
-    handlers[TCmdData(p^).cmd.cmd](TCmdData(p^))
-end;
-
-procedure sendChatLine(msg: PChar); cdecl;
-begin
-    sendNetLn('CHAT');
-    sendNet(msg);
-end;
-
-procedure joinRoom(roomName: PChar); cdecl;
-begin
-    sendNetLn('JOIN_ROOM');
-    sendNet(roomName);
-end;
-
-procedure partRoom(msg: PChar); cdecl;
-var s: string;
-begin
-    if isInRoom then
-    begin
-        s:= 'PART';
-        if length(msg) > 0 then
-            s:= s + #10 + msg;
-        sendNet(s);
-
-        onRoomLeaving()
-    end
-end;
-
-procedure ResetNetState;
-begin
-    isInRoom:= false;
-end;
-
-end.
-