Transfer blind values as 32 bit values in network games. This version is not compatible to the current beta server.

This commit is contained in:
lotodore
2007-10-10 11:38:58 +00:00
parent 3b0c54e5c6
commit bbb1377741
2 changed files with 31 additions and 28 deletions
+11 -8
View File
@@ -1,4 +1,5 @@
Changelog: Changelog:
10-10-2007: All blinds are 32 Bit now.
10-03-2007: Added basic structure: Game Info Block 10-03-2007: Added basic structure: Game Info Block
09-05-2007: Minimum packet length is now definitely 8. 09-05-2007: Minimum packet length is now definitely 8.
08-26-2007: Server sends player name only on request. 08-26-2007: Server sends player name only on request.
@@ -150,21 +151,23 @@ Server/Client Reply: Avatar End
Basic Structure: Game Info Block Basic Structure: Game Info Block
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Max Number of Players | First Small Blind | | Max Number of Players | Raise Interval Mode |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Raise Interval Mode | Raise Small Blind Interval | | Raise Small Blind Interval | Raise Mode |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Raise Mode | End Raise Mode | | End Raise Mode | Number of Manual Blinds |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| End Raise Small Blind Value | Number of Manual Blinds |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Proposed GUI Speed | Player Action Timeout | | Proposed GUI Speed | Player Action Timeout |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| First Small Blind |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| End Raise Small Blind Value |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Start Money | | Start Money |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
\ Manual Blind Slot #1 | Manual Blind Slot #2 / | \
| +-------------------------------+ \ Manual Blind Slots /
/ Manual Blind Slot #n | padding | / |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+20 -20
View File
@@ -168,15 +168,15 @@ struct GCC_PACKED NetPacketAvatarEndData
struct GCC_PACKED GameInfoData struct GCC_PACKED GameInfoData
{ {
u_int16_t maxNumberOfPlayers; u_int16_t maxNumberOfPlayers;
u_int16_t firstSmallBlind;
u_int16_t raiseIntervalMode; u_int16_t raiseIntervalMode;
u_int16_t raiseSmallBlindInterval; u_int16_t raiseSmallBlindInterval;
u_int16_t raiseMode; u_int16_t raiseMode;
u_int16_t endRaiseMode; u_int16_t endRaiseMode;
u_int16_t endRaiseSmallBlindValue;
u_int16_t numberOfManualBlinds; u_int16_t numberOfManualBlinds;
u_int16_t proposedGuiSpeed; u_int16_t proposedGuiSpeed;
u_int16_t playerActionTimeout; u_int16_t playerActionTimeout;
u_int32_t firstSmallBlind;
u_int32_t endRaiseSmallBlindValue;
u_int32_t startMoney; u_int32_t startMoney;
}; };
@@ -479,26 +479,26 @@ void SetGameInfoData(const GameData &inData, GameInfoData *outData)
u_int16_t numManualBlinds = (u_int16_t)inData.manualBlindsList.size(); u_int16_t numManualBlinds = (u_int16_t)inData.manualBlindsList.size();
outData->maxNumberOfPlayers = htons(inData.maxNumberOfPlayers); outData->maxNumberOfPlayers = htons(inData.maxNumberOfPlayers);
outData->firstSmallBlind = htons(inData.firstSmallBlind);
outData->raiseIntervalMode = htons(inData.raiseIntervalMode); outData->raiseIntervalMode = htons(inData.raiseIntervalMode);
outData->raiseSmallBlindInterval = inData.raiseIntervalMode == RAISE_ON_HANDNUMBER outData->raiseSmallBlindInterval = inData.raiseIntervalMode == RAISE_ON_HANDNUMBER
? htons(inData.raiseSmallBlindEveryHandsValue) : htons(inData.raiseSmallBlindEveryMinutesValue); ? htons(inData.raiseSmallBlindEveryHandsValue) : htons(inData.raiseSmallBlindEveryMinutesValue);
outData->raiseMode = htons(inData.raiseMode); outData->raiseMode = htons(inData.raiseMode);
outData->endRaiseMode = htons(inData.afterManualBlindsMode); outData->endRaiseMode = htons(inData.afterManualBlindsMode);
outData->endRaiseSmallBlindValue = htons(inData.afterMBAlwaysRaiseValue);
outData->numberOfManualBlinds = htons(numManualBlinds); outData->numberOfManualBlinds = htons(numManualBlinds);
outData->proposedGuiSpeed = htons(inData.guiSpeed); outData->proposedGuiSpeed = htons(inData.guiSpeed);
outData->playerActionTimeout = htons(inData.playerActionTimeoutSec); outData->playerActionTimeout = htons(inData.playerActionTimeoutSec);
outData->endRaiseSmallBlindValue = htonl(inData.afterMBAlwaysRaiseValue);
outData->firstSmallBlind = htonl(inData.firstSmallBlind);
outData->startMoney = htonl(inData.startMoney); outData->startMoney = htonl(inData.startMoney);
if (numManualBlinds) if (numManualBlinds)
{ {
u_int16_t *manualBlindsPtr = (u_int16_t *)((char *)outData + sizeof(GameInfoData)); u_int32_t *manualBlindsPtr = (u_int32_t *)((char *)outData + sizeof(GameInfoData));
list<int>::const_iterator i = inData.manualBlindsList.begin(); list<int>::const_iterator i = inData.manualBlindsList.begin();
list<int>::const_iterator end = inData.manualBlindsList.end(); list<int>::const_iterator end = inData.manualBlindsList.end();
while (i != end) while (i != end)
{ {
*manualBlindsPtr = htons(*i); *manualBlindsPtr = htonl(*i);
++manualBlindsPtr; ++manualBlindsPtr;
++i; ++i;
} }
@@ -512,8 +512,6 @@ void GetGameInfoData(const GameInfoData *inData, GameData &outData)
u_int16_t numManualBlinds = ntohs(inData->numberOfManualBlinds); u_int16_t numManualBlinds = ntohs(inData->numberOfManualBlinds);
outData.maxNumberOfPlayers = ntohs(inData->maxNumberOfPlayers); outData.maxNumberOfPlayers = ntohs(inData->maxNumberOfPlayers);
outData.firstSmallBlind = ntohs(inData->firstSmallBlind);
/*remove me*/ outData.smallBlind = ntohs(inData->firstSmallBlind); // TODO remove
outData.raiseIntervalMode = static_cast<RaiseIntervalMode>(ntohs(inData->raiseIntervalMode)); outData.raiseIntervalMode = static_cast<RaiseIntervalMode>(ntohs(inData->raiseIntervalMode));
outData.raiseSmallBlindEveryHandsValue = outData.raiseSmallBlindEveryMinutesValue = 0; outData.raiseSmallBlindEveryHandsValue = outData.raiseSmallBlindEveryMinutesValue = 0;
if (outData.raiseIntervalMode == RAISE_ON_HANDNUMBER) if (outData.raiseIntervalMode == RAISE_ON_HANDNUMBER)
@@ -522,17 +520,19 @@ void GetGameInfoData(const GameInfoData *inData, GameData &outData)
outData.raiseSmallBlindEveryMinutesValue = ntohs(inData->raiseSmallBlindInterval); outData.raiseSmallBlindEveryMinutesValue = ntohs(inData->raiseSmallBlindInterval);
outData.raiseMode = static_cast<RaiseMode>(ntohs(inData->raiseMode)); outData.raiseMode = static_cast<RaiseMode>(ntohs(inData->raiseMode));
outData.afterManualBlindsMode = static_cast<AfterManualBlindsMode>(ntohs(inData->endRaiseMode)); outData.afterManualBlindsMode = static_cast<AfterManualBlindsMode>(ntohs(inData->endRaiseMode));
outData.afterMBAlwaysRaiseValue = ntohs(inData->endRaiseSmallBlindValue);
outData.guiSpeed = ntohs(inData->proposedGuiSpeed); outData.guiSpeed = ntohs(inData->proposedGuiSpeed);
outData.playerActionTimeoutSec = ntohs(inData->playerActionTimeout); outData.playerActionTimeoutSec = ntohs(inData->playerActionTimeout);
outData.firstSmallBlind = ntohl(inData->firstSmallBlind);
/*remove me*/ outData.smallBlind = ntohs(inData->firstSmallBlind); // TODO remove
outData.afterMBAlwaysRaiseValue = ntohl(inData->endRaiseSmallBlindValue);
outData.startMoney = ntohl(inData->startMoney); outData.startMoney = ntohl(inData->startMoney);
if (numManualBlinds) if (numManualBlinds)
{ {
const u_int16_t *manualBlindsPtr = (const u_int16_t *)((const char *)inData + sizeof(GameInfoData)); const u_int32_t *manualBlindsPtr = (const u_int32_t *)((const char *)inData + sizeof(GameInfoData));
for (u_int16_t i = 0; i < numManualBlinds; i++) for (u_int16_t i = 0; i < numManualBlinds; i++)
{ {
outData.manualBlindsList.push_back(ntohs(*manualBlindsPtr)); outData.manualBlindsList.push_back(ntohl(*manualBlindsPtr));
++manualBlindsPtr; ++manualBlindsPtr;
} }
} }
@@ -546,13 +546,13 @@ CheckGameInfoData(const GameInfoData *tmpData)
int proposedGuiSpeed = ntohs(tmpData->proposedGuiSpeed); int proposedGuiSpeed = ntohs(tmpData->proposedGuiSpeed);
if (maxNumPlayers < MIN_NUMBER_OF_PLAYERS if (maxNumPlayers < MIN_NUMBER_OF_PLAYERS
|| maxNumPlayers > MAX_NUMBER_OF_PLAYERS || maxNumPlayers > MAX_NUMBER_OF_PLAYERS
|| !ntohs(tmpData->firstSmallBlind)
|| !ntohs(tmpData->raiseIntervalMode) || !ntohs(tmpData->raiseIntervalMode)
|| !ntohs(tmpData->raiseSmallBlindInterval) || !ntohs(tmpData->raiseSmallBlindInterval)
|| !ntohs(tmpData->raiseMode) || !ntohs(tmpData->raiseMode)
|| !ntohs(tmpData->endRaiseMode) || !ntohs(tmpData->endRaiseMode)
|| proposedGuiSpeed < MIN_GUI_SPEED || proposedGuiSpeed < MIN_GUI_SPEED
|| proposedGuiSpeed > MAX_GUI_SPEED || proposedGuiSpeed > MAX_GUI_SPEED
|| !ntohl(tmpData->firstSmallBlind)
|| !ntohl(tmpData->startMoney)) || !ntohl(tmpData->startMoney))
{ {
throw NetException(ERR_SOCK_INVALID_PACKET, 0); throw NetException(ERR_SOCK_INVALID_PACKET, 0);
@@ -1551,7 +1551,7 @@ NetPacketGameListNew::SetData(const NetPacketGameListNew::Data &inData)
u_int16_t curNumPlayers = (u_int16_t)inData.gameInfo.players.size(); u_int16_t curNumPlayers = (u_int16_t)inData.gameInfo.players.size();
u_int16_t numManualBlinds = (u_int16_t)inData.gameInfo.data.manualBlindsList.size(); u_int16_t numManualBlinds = (u_int16_t)inData.gameInfo.data.manualBlindsList.size();
int manualBlindsSize = ADD_PADDING(numManualBlinds * sizeof(u_int16_t)); int manualBlindsSize = numManualBlinds * sizeof(u_int32_t);
// Some basic checks, so we don't use up too much memory. // Some basic checks, so we don't use up too much memory.
// The constructed packet will also be checked. // The constructed packet will also be checked.
@@ -1606,7 +1606,7 @@ NetPacketGameListNew::GetData(NetPacketGameListNew::Data &outData) const
NetPacketGameListNewData *tmpData = (NetPacketGameListNewData *)GetRawData(); NetPacketGameListNewData *tmpData = (NetPacketGameListNewData *)GetRawData();
u_int16_t numManualBlinds = ntohs(tmpData->gameData.numberOfManualBlinds); u_int16_t numManualBlinds = ntohs(tmpData->gameData.numberOfManualBlinds);
int manualBlindsSize = ADD_PADDING(numManualBlinds * sizeof(u_int16_t)); int manualBlindsSize = numManualBlinds * sizeof(u_int32_t);
outData.gameId = ntohl(tmpData->gameId); outData.gameId = ntohl(tmpData->gameId);
outData.gameInfo.mode = static_cast<GameMode>(ntohs(tmpData->gameMode)); outData.gameInfo.mode = static_cast<GameMode>(ntohs(tmpData->gameMode));
@@ -1643,7 +1643,7 @@ NetPacketGameListNew::InternalCheck(const NetPacketHeader* data) const
int gameNameLength = ntohs(tmpData->gameNameLength); int gameNameLength = ntohs(tmpData->gameNameLength);
int curNumPlayers = ntohs(tmpData->curNumberOfPlayers); int curNumPlayers = ntohs(tmpData->curNumberOfPlayers);
u_int16_t numManualBlinds = ntohs(tmpData->gameData.numberOfManualBlinds); u_int16_t numManualBlinds = ntohs(tmpData->gameData.numberOfManualBlinds);
int manualBlindsLength = ADD_PADDING(numManualBlinds * sizeof(u_int16_t)); int manualBlindsLength = numManualBlinds * sizeof(u_int32_t);
// Exact checking of dynamic packet size. // Exact checking of dynamic packet size.
if (dataLen != if (dataLen !=
sizeof(NetPacketGameListNewData) sizeof(NetPacketGameListNewData)
@@ -2062,7 +2062,7 @@ NetPacketCreateGame::SetData(const NetPacketCreateGame::Data &inData)
if (numManualBlinds > MAX_NUM_MANUAL_BLINDS) if (numManualBlinds > MAX_NUM_MANUAL_BLINDS)
throw NetException(ERR_NET_TOO_MANY_MANUAL_BLINDS, 0); throw NetException(ERR_NET_TOO_MANY_MANUAL_BLINDS, 0);
int manualBlindsSize = ADD_PADDING(numManualBlinds * sizeof(u_int16_t)); int manualBlindsSize = numManualBlinds * sizeof(u_int32_t);
// Resize the packet so that the data fits in. // Resize the packet so that the data fits in.
Resize((u_int16_t) Resize((u_int16_t)
(sizeof(NetPacketCreateGameData) + manualBlindsSize + ADD_PADDING(gameNameLen) + ADD_PADDING(passwordLen))); (sizeof(NetPacketCreateGameData) + manualBlindsSize + ADD_PADDING(gameNameLen) + ADD_PADDING(passwordLen)));
@@ -2090,7 +2090,7 @@ NetPacketCreateGame::GetData(NetPacketCreateGame::Data &outData) const
NetPacketCreateGameData *tmpData = (NetPacketCreateGameData *)GetRawData(); NetPacketCreateGameData *tmpData = (NetPacketCreateGameData *)GetRawData();
u_int16_t numManualBlinds = ntohs(tmpData->gameData.numberOfManualBlinds); u_int16_t numManualBlinds = ntohs(tmpData->gameData.numberOfManualBlinds);
int manualBlindsSize = ADD_PADDING(numManualBlinds * sizeof(u_int16_t)); int manualBlindsSize = numManualBlinds * sizeof(u_int32_t);
GetGameInfoData(&tmpData->gameData, outData.gameData); GetGameInfoData(&tmpData->gameData, outData.gameData);
@@ -2114,7 +2114,7 @@ NetPacketCreateGame::InternalCheck(const NetPacketHeader* data) const
int passwordLength = ntohs(tmpData->passwordLength); int passwordLength = ntohs(tmpData->passwordLength);
int gameNameLength = ntohs(tmpData->gameNameLength); int gameNameLength = ntohs(tmpData->gameNameLength);
int numManualBlinds = ntohs(tmpData->gameData.numberOfManualBlinds); int numManualBlinds = ntohs(tmpData->gameData.numberOfManualBlinds);
int manualBlindsLength = ADD_PADDING(numManualBlinds * sizeof(u_int16_t)); int manualBlindsLength = numManualBlinds * sizeof(u_int32_t);
// Exact checking of dynamic packet size. // Exact checking of dynamic packet size.
if (dataLen < if (dataLen <
sizeof(NetPacketCreateGameData) sizeof(NetPacketCreateGameData)
@@ -2271,7 +2271,7 @@ NetPacketJoinGameAck::SetData(const NetPacketJoinGameAck::Data &inData)
if (numManualBlinds > MAX_NUM_MANUAL_BLINDS) if (numManualBlinds > MAX_NUM_MANUAL_BLINDS)
throw NetException(ERR_NET_TOO_MANY_MANUAL_BLINDS, 0); throw NetException(ERR_NET_TOO_MANY_MANUAL_BLINDS, 0);
int manualBlindsSize = ADD_PADDING(numManualBlinds * sizeof(u_int16_t)); int manualBlindsSize = numManualBlinds * sizeof(u_int32_t);
// Resize the packet so that the data fits in. // Resize the packet so that the data fits in.
Resize((u_int16_t) Resize((u_int16_t)
(sizeof(NetPacketJoinGameAckData) + manualBlindsSize)); (sizeof(NetPacketJoinGameAckData) + manualBlindsSize));
@@ -2312,7 +2312,7 @@ NetPacketJoinGameAck::InternalCheck(const NetPacketHeader* data) const
u_int16_t dataLen = ntohs(data->length); u_int16_t dataLen = ntohs(data->length);
NetPacketJoinGameAckData *tmpData = (NetPacketJoinGameAckData *)data; NetPacketJoinGameAckData *tmpData = (NetPacketJoinGameAckData *)data;
int numManualBlinds = ntohs(tmpData->gameData.numberOfManualBlinds); int numManualBlinds = ntohs(tmpData->gameData.numberOfManualBlinds);
int manualBlindsLength = ADD_PADDING(numManualBlinds * sizeof(u_int16_t)); int manualBlindsLength = numManualBlinds * sizeof(u_int32_t);
// Exact checking of dynamic packet size. // Exact checking of dynamic packet size.
if (dataLen < if (dataLen <
sizeof(NetPacketJoinGameAckData) sizeof(NetPacketJoinGameAckData)