diff -r 4815e406a760 -r 091149424aa4 hedgewars/uFLNetProtocol.pas --- a/hedgewars/uFLNetProtocol.pas Fri Nov 20 23:05:49 2015 +0300 +++ b/hedgewars/uFLNetProtocol.pas Fri Nov 20 23:56:13 2015 +0300 @@ -18,7 +18,7 @@ procedure handler_BANLIST(var p: TCmdParam); begin end; - + procedure handler_BANLIST_s(var s: TCmdParamS); begin end; @@ -38,7 +38,7 @@ procedure handler_CLIENT_FLAGS(var p: TCmdParamS); begin end; - + procedure handler_CLIENT_FLAGS_s(var s: TCmdParamS); begin end; @@ -53,7 +53,7 @@ procedure handler_EM(var p: TCmdParam); begin end; - + procedure handler_EM_s(var s: TCmdParamS); begin end; @@ -65,7 +65,7 @@ procedure handler_HH_NUM(var p: TCmdParam); begin end; - + procedure handler_HH_NUM_s(var s: TCmdParamS); begin end; @@ -73,7 +73,7 @@ procedure handler_INFO(var p: TCmdParam); begin end; - + procedure handler_INFO_s(var s: TCmdParamS); begin end; @@ -81,7 +81,7 @@ procedure handler_JOINED(var p: TCmdParam); begin end; - + procedure handler_JOINED_s(var s: TCmdParamS); begin end; @@ -97,7 +97,7 @@ procedure handler_LEFT(var p: TCmdParamS); begin end; - + procedure handler_LEFT_s(var s: TCmdParamS); begin end; @@ -105,7 +105,7 @@ procedure handler_LOBBY_JOINED(var p: TCmdParam); begin end; - + procedure handler_LOBBY_JOINED_s(var s: TCmdParamS); begin sendUI(mtAddLobbyClient, @s.str1[1], length(s.str1)); @@ -127,7 +127,7 @@ begin sendNet('PONG') end; - + procedure handler_PING_s(var s: TCmdParamS); begin end; @@ -136,12 +136,62 @@ begin end; +type TRoomAction = (raUnknown, raAdd, raUpdate, raRemove); +const raRoomInfoLength: array[TRoomAction] of integer = (1, 9, 10, 1); +const raRoomAction: array[TRoomAction] of TMessageType = (mtAddRoom, mtAddRoom, mtUpdateRoom, mtRemoveRoom); +var roomInfo: string; + roomLinesCount: integer; + roomAction: TRoomAction; + +procedure handler_ROOM(var p: TCmdParam); +begin + roomInfo:= ''; + roomLinesCount:= 0; + roomAction:= raUnknown +end; + +procedure handler_ROOM_s(var s: TCmdParamS); +begin + if roomAction = raUnknown then + begin + if s.str1 = 'ADD' then + roomAction:= raAdd + else + if s.str1 = 'UPD' then + roomAction:= raUpdate + else + if s.str1 = 'DEL' then + roomAction:= raRemove + end + else begin + roomInfo:= roomInfo + s.str1 + #10; + inc(roomLinesCount); + + if roomLinesCount = raRoomInfoLength[roomAction] then + begin + sendUI(raRoomAction[roomAction], @roomInfo[1], length(roomInfo)); + roomLinesCount:= 0; + roomInfo:= '' + end; + end; +end; + 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)); + roomLinesCount:= 0; + roomInfo:= '' + end else inc(roomLinesCount); end; procedure handler_ROUND_FINISHED(var p: TCmdParam); @@ -171,7 +221,7 @@ procedure handler_TEAM_COLOR(var p: TCmdParam); begin end; - + procedure handler_TEAM_COLOR_s(var s: TCmdParamS); begin end; @@ -192,12 +242,13 @@ PHandler(@handler_LEFT_s), 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_ROOMS), - PHandler(@handler_ROOMS_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_TEAM_COLOR_s), PHandler(@handler_WARNING)); + PHandler(@handler_PING_s), PHandler(@handler_PROTO), PHandler(@handler_ROOM), + PHandler(@handler_ROOM_s), PHandler(@handler_ROOMS), PHandler(@handler_ROOMS_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_TEAM_COLOR_s), + PHandler(@handler_WARNING)); procedure passNetData(p: pointer); cdecl; begin