diff --git a/cockatrice/src/abstractclient.cpp b/cockatrice/src/abstractclient.cpp index 01abfac6..f8d6feb0 100644 --- a/cockatrice/src/abstractclient.cpp +++ b/cockatrice/src/abstractclient.cpp @@ -5,7 +5,6 @@ #include "pending_command.h" #include "pb/commands.pb.h" #include -#include AbstractClient::AbstractClient(QObject *parent) : QObject(parent), nextCmdId(0), status(StatusDisconnected) diff --git a/cockatrice/src/pending_command.cpp b/cockatrice/src/pending_command.cpp index b6dc5dcc..9c698286 100644 --- a/cockatrice/src/pending_command.cpp +++ b/cockatrice/src/pending_command.cpp @@ -3,7 +3,6 @@ void PendingCommand::processResponse(ProtocolResponse *response) { - qDebug("processResponse"); emit finished(response); emit finished(response->getResponseCode()); } diff --git a/cockatrice/src/tab_game.cpp b/cockatrice/src/tab_game.cpp index 772c8b1e..ed3b046e 100644 --- a/cockatrice/src/tab_game.cpp +++ b/cockatrice/src/tab_game.cpp @@ -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(parent())->prepareGameCommand(cmd); connect(pend, SIGNAL(finished(ProtocolResponse *)), this, SLOT(deckSelectFinished(ProtocolResponse *))); static_cast(parent())->sendGameCommand(pend, playerId); diff --git a/common/decklist.cpp b/common/decklist.cpp index c4eefff7..9c0ce131 100644 --- a/common/decklist.cpp +++ b/common/decklist.cpp @@ -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); diff --git a/common/decklist.h b/common/decklist.h index c4df9f6e..e836ea79 100644 --- a/common/decklist.h +++ b/common/decklist.h @@ -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); diff --git a/common/server_protocolhandler.cpp b/common/server_protocolhandler.cpp index 2c3ff818..3c82ca68 100644 --- a/common/server_protocolhandler.cpp +++ b/common/server_protocolhandler.cpp @@ -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())); diff --git a/servatrice/src/serversocketinterface.cpp b/servatrice/src/serversocketinterface.cpp index df9ac3c2..31602587 100644 --- a/servatrice/src/serversocketinterface.cpp +++ b/servatrice/src/serversocketinterface.cpp @@ -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