fixed packet length calculation bug, re-enabled deck selection

This commit is contained in:
Max-Wilhelm Bruker 2011-12-18 19:10:47 +01:00
parent 314f17091d
commit 38e4781624
7 changed files with 30 additions and 11 deletions

View file

@ -5,7 +5,6 @@
#include "pending_command.h"
#include "pb/commands.pb.h"
#include <google/protobuf/descriptor.h>
#include <QDebug>
AbstractClient::AbstractClient(QObject *parent)
: QObject(parent), nextCmdId(0), status(StatusDisconnected)

View file

@ -3,7 +3,6 @@
void PendingCommand::processResponse(ProtocolResponse *response)
{
qDebug("processResponse");
emit finished(response);
emit finished(response->getResponseCode());
}

View file

@ -123,7 +123,7 @@ void DeckViewContainer::loadLocalDeck()
}
Command_DeckSelect cmd;
cmd.set_deck(""); // XXX
cmd.set_deck(deck->writeToString_Native().toStdString());
PendingCommand *pend = static_cast<TabGame *>(parent())->prepareGameCommand(cmd);
connect(pend, SIGNAL(finished(ProtocolResponse *)), this, SLOT(deckSelectFinished(ProtocolResponse *)));
static_cast<TabGame *>(parent())->sendGameCommand(pend, playerId);

View file

@ -267,6 +267,15 @@ DeckList::DeckList(DeckList *other)
updateDeckHash();
}
DeckList::DeckList(const QString &nativeString)
: SerializableItem("cockatrice_deck"), currentZone(0), currentSideboardPlan(0)
{
root = new InnerDecklistNode;
QXmlStreamReader xml(nativeString);
loadFromXml(&xml);
}
DeckList::~DeckList()
{
delete root;
@ -360,6 +369,16 @@ void DeckList::loadFromXml(QXmlStreamReader *xml)
updateDeckHash();
}
QString DeckList::writeToString_Native()
{
QString result;
QXmlStreamWriter xml(&result);
xml.writeStartDocument();
write(&xml);
xml.writeEndDocument();
return result;
}
bool DeckList::loadFromFile_Native(QIODevice *device)
{
QXmlStreamReader xml(device);

View file

@ -139,6 +139,7 @@ public:
static const QStringList fileNameFilters;
DeckList();
DeckList(DeckList *other);
DeckList(const QString &nativeString);
~DeckList();
QString getName() const { return name; }
QString getComments() const { return comments; }
@ -151,7 +152,7 @@ public:
bool readElement(QXmlStreamReader *xml);
void writeElement(QXmlStreamWriter *xml);
void loadFromXml(QXmlStreamReader *xml);
QString writeToString_Native();
bool loadFromFile_Native(QIODevice *device);
bool saveToFile_Native(QIODevice *device);
bool loadFromStream_Plain(QTextStream &stream);

View file

@ -708,17 +708,15 @@ ResponseCode Server_ProtocolHandler::cmdDeckSelect(const Command_DeckSelect &cmd
return RespFunctionNotAllowed;
DeckList *deck;
if (cmd.deck_id() == -1) {
// if (!cmd->getDeck())
// return RespInvalidData;
// deck = new DeckList(cmd->getDeck());
} else {
if (cmd.has_deck_id()) {
try {
deck = getDeckFromDatabase(cmd.deck_id());
} catch(ResponseCode r) {
return r;
}
}
} else
deck = new DeckList(QString::fromStdString(cmd.deck()));
player->setDeck(deck);
game->sendGameEvent(new Event_PlayerPropertiesChanged(player->getPlayerId(), player->getProperties()), new Context_DeckSelect(deck->getDeckHash()));

View file

@ -102,7 +102,10 @@ void ServerSocketInterface::readClient()
do {
if (!messageInProgress) {
if (inputBuffer.size() >= 4) {
messageLength = (int) (((quint32) inputBuffer[0]) << 24) + (((quint32) inputBuffer[1]) << 16) + (((quint32) inputBuffer[2]) << 8) + ((quint32) inputBuffer[3]);
messageLength = (((quint32) (unsigned char) inputBuffer[0]) << 24)
+ (((quint32) (unsigned char) inputBuffer[1]) << 16)
+ (((quint32) (unsigned char) inputBuffer[2]) << 8)
+ ((quint32) (unsigned char) inputBuffer[3]);
inputBuffer.remove(0, 4);
messageInProgress = true;
} else