bugfix, more deck list submission code

This commit is contained in:
Max-Wilhelm Bruker 2009-11-17 18:36:30 +01:00
parent fdf921e718
commit 7a07a395f1
10 changed files with 118 additions and 113 deletions

View file

@ -4,62 +4,61 @@ ItemId_Command_Login = 1002,
ItemId_Command_DeckList = 1003, ItemId_Command_DeckList = 1003,
ItemId_Command_DeckNewDir = 1004, ItemId_Command_DeckNewDir = 1004,
ItemId_Command_DeckDelDir = 1005, ItemId_Command_DeckDelDir = 1005,
ItemId_Command_DeckNew = 1006, ItemId_Command_DeckDel = 1006,
ItemId_Command_DeckDel = 1007, ItemId_Command_DeckDownload = 1007,
ItemId_Command_DeckDownload = 1008, ItemId_Command_ListChatChannels = 1008,
ItemId_Command_ListChatChannels = 1009, ItemId_Command_ChatJoinChannel = 1009,
ItemId_Command_ChatJoinChannel = 1010, ItemId_Command_ChatLeaveChannel = 1010,
ItemId_Command_ChatLeaveChannel = 1011, ItemId_Command_ChatSay = 1011,
ItemId_Command_ChatSay = 1012, ItemId_Command_ListGames = 1012,
ItemId_Command_ListGames = 1013, ItemId_Command_CreateGame = 1013,
ItemId_Command_CreateGame = 1014, ItemId_Command_JoinGame = 1014,
ItemId_Command_JoinGame = 1015, ItemId_Command_LeaveGame = 1015,
ItemId_Command_LeaveGame = 1016, ItemId_Command_Say = 1016,
ItemId_Command_Say = 1017, ItemId_Command_Shuffle = 1017,
ItemId_Command_Shuffle = 1018, ItemId_Command_RollDie = 1018,
ItemId_Command_RollDie = 1019, ItemId_Command_DrawCards = 1019,
ItemId_Command_DrawCards = 1020, ItemId_Command_MoveCard = 1020,
ItemId_Command_MoveCard = 1021, ItemId_Command_CreateToken = 1021,
ItemId_Command_CreateToken = 1022, ItemId_Command_CreateArrow = 1022,
ItemId_Command_CreateArrow = 1023, ItemId_Command_DeleteArrow = 1023,
ItemId_Command_DeleteArrow = 1024, ItemId_Command_SetCardAttr = 1024,
ItemId_Command_SetCardAttr = 1025, ItemId_Command_ReadyStart = 1025,
ItemId_Command_ReadyStart = 1026, ItemId_Command_IncCounter = 1026,
ItemId_Command_IncCounter = 1027, ItemId_Command_AddCounter = 1027,
ItemId_Command_AddCounter = 1028, ItemId_Command_SetCounter = 1028,
ItemId_Command_SetCounter = 1029, ItemId_Command_DelCounter = 1029,
ItemId_Command_DelCounter = 1030, ItemId_Command_NextTurn = 1030,
ItemId_Command_NextTurn = 1031, ItemId_Command_SetActivePhase = 1031,
ItemId_Command_SetActivePhase = 1032, ItemId_Command_DumpZone = 1032,
ItemId_Command_DumpZone = 1033, ItemId_Command_StopDumpZone = 1033,
ItemId_Command_StopDumpZone = 1034, ItemId_Command_DumpAll = 1034,
ItemId_Command_DumpAll = 1035, ItemId_Command_SubmitDeck = 1035,
ItemId_Command_SubmitDeck = 1036, ItemId_Event_Say = 1036,
ItemId_Event_Say = 1037, ItemId_Event_Join = 1037,
ItemId_Event_Join = 1038, ItemId_Event_Leave = 1038,
ItemId_Event_Leave = 1039, ItemId_Event_GameClosed = 1039,
ItemId_Event_GameClosed = 1040, ItemId_Event_ReadyStart = 1040,
ItemId_Event_ReadyStart = 1041, ItemId_Event_SetupZones = 1041,
ItemId_Event_SetupZones = 1042, ItemId_Event_GameStart = 1042,
ItemId_Event_GameStart = 1043, ItemId_Event_Shuffle = 1043,
ItemId_Event_Shuffle = 1044, ItemId_Event_RollDie = 1044,
ItemId_Event_RollDie = 1045, ItemId_Event_MoveCard = 1045,
ItemId_Event_MoveCard = 1046, ItemId_Event_CreateToken = 1046,
ItemId_Event_CreateToken = 1047, ItemId_Event_CreateArrow = 1047,
ItemId_Event_CreateArrow = 1048, ItemId_Event_DeleteArrow = 1048,
ItemId_Event_DeleteArrow = 1049, ItemId_Event_SetCardAttr = 1049,
ItemId_Event_SetCardAttr = 1050, ItemId_Event_AddCounter = 1050,
ItemId_Event_AddCounter = 1051, ItemId_Event_SetCounter = 1051,
ItemId_Event_SetCounter = 1052, ItemId_Event_DelCounter = 1052,
ItemId_Event_DelCounter = 1053, ItemId_Event_SetActivePlayer = 1053,
ItemId_Event_SetActivePlayer = 1054, ItemId_Event_SetActivePhase = 1054,
ItemId_Event_SetActivePhase = 1055, ItemId_Event_DumpZone = 1055,
ItemId_Event_DumpZone = 1056, ItemId_Event_StopDumpZone = 1056,
ItemId_Event_StopDumpZone = 1057, ItemId_Event_ServerMessage = 1057,
ItemId_Event_ServerMessage = 1058, ItemId_Event_GameJoined = 1058,
ItemId_Event_GameJoined = 1059, ItemId_Event_ChatJoinChannel = 1059,
ItemId_Event_ChatJoinChannel = 1060, ItemId_Event_ChatLeaveChannel = 1060,
ItemId_Event_ChatLeaveChannel = 1061, ItemId_Event_ChatSay = 1061,
ItemId_Event_ChatSay = 1062, ItemId_Other = 1062
ItemId_Other = 1063
}; };

View file

@ -33,29 +33,15 @@ void Command_DeckNewDir::extractParameters()
path = parameters["path"]; path = parameters["path"];
name = parameters["name"]; name = parameters["name"];
} }
Command_DeckDelDir::Command_DeckDelDir(const QString &_path, const QString &_name) Command_DeckDelDir::Command_DeckDelDir(const QString &_path)
: Command("deck_del_dir"), path(_path), name(_name) : Command("deck_del_dir"), path(_path)
{ {
setParameter("path", path); setParameter("path", path);
setParameter("name", name);
} }
void Command_DeckDelDir::extractParameters() void Command_DeckDelDir::extractParameters()
{ {
Command::extractParameters(); Command::extractParameters();
path = parameters["path"]; path = parameters["path"];
name = parameters["name"];
}
Command_DeckNew::Command_DeckNew(const QString &_path, int _id)
: Command("deck_new"), path(_path), id(_id)
{
setParameter("path", path);
setParameter("id", id);
}
void Command_DeckNew::extractParameters()
{
Command::extractParameters();
path = parameters["path"];
id = parameters["id"].toInt();
} }
Command_DeckDel::Command_DeckDel(int _id) Command_DeckDel::Command_DeckDel(int _id)
: Command("deck_del"), id(_id) : Command("deck_del"), id(_id)
@ -672,7 +658,6 @@ void ProtocolItem::initializeHashAuto()
itemNameHash.insert("cmddeck_list", Command_DeckList::newItem); itemNameHash.insert("cmddeck_list", Command_DeckList::newItem);
itemNameHash.insert("cmddeck_new_dir", Command_DeckNewDir::newItem); itemNameHash.insert("cmddeck_new_dir", Command_DeckNewDir::newItem);
itemNameHash.insert("cmddeck_del_dir", Command_DeckDelDir::newItem); itemNameHash.insert("cmddeck_del_dir", Command_DeckDelDir::newItem);
itemNameHash.insert("cmddeck_new", Command_DeckNew::newItem);
itemNameHash.insert("cmddeck_del", Command_DeckDel::newItem); itemNameHash.insert("cmddeck_del", Command_DeckDel::newItem);
itemNameHash.insert("cmddeck_download", Command_DeckDownload::newItem); itemNameHash.insert("cmddeck_download", Command_DeckDownload::newItem);
itemNameHash.insert("cmdlist_chat_channels", Command_ListChatChannels::newItem); itemNameHash.insert("cmdlist_chat_channels", Command_ListChatChannels::newItem);

View file

@ -2,8 +2,7 @@
0:login:s,username:s,password 0:login:s,username:s,password
0:deck_list 0:deck_list
0:deck_new_dir:s,path:s,name 0:deck_new_dir:s,path:s,name
0:deck_del_dir:s,path:s,name 0:deck_del_dir:s,path
0:deck_new:s,path:i,id
0:deck_del:i,id 0:deck_del:i,id
0:deck_download:i,id 0:deck_download:i,id
0:list_chat_channels 0:list_chat_channels

View file

@ -51,30 +51,14 @@ class Command_DeckDelDir : public Command {
Q_OBJECT Q_OBJECT
private: private:
QString path; QString path;
QString name;
public: public:
Command_DeckDelDir(const QString &_path = QString(), const QString &_name = QString()); Command_DeckDelDir(const QString &_path = QString());
QString getPath() const { return path; } QString getPath() const { return path; }
QString getName() const { return name; }
static ProtocolItem *newItem() { return new Command_DeckDelDir; } static ProtocolItem *newItem() { return new Command_DeckDelDir; }
int getItemId() const { return ItemId_Command_DeckDelDir; } int getItemId() const { return ItemId_Command_DeckDelDir; }
protected: protected:
void extractParameters(); void extractParameters();
}; };
class Command_DeckNew : public Command {
Q_OBJECT
private:
QString path;
int id;
public:
Command_DeckNew(const QString &_path = QString(), int _id = -1);
QString getPath() const { return path; }
int getId() const { return id; }
static ProtocolItem *newItem() { return new Command_DeckNew; }
int getItemId() const { return ItemId_Command_DeckNew; }
protected:
void extractParameters();
};
class Command_DeckDel : public Command { class Command_DeckDel : public Command {
Q_OBJECT Q_OBJECT
private: private:

View file

@ -87,7 +87,6 @@ void Server_ProtocolHandler::processCommand(Command *command)
case ItemId_Command_DeckList: response = cmdDeckList(qobject_cast<Command_DeckList *>(command)); break; case ItemId_Command_DeckList: response = cmdDeckList(qobject_cast<Command_DeckList *>(command)); break;
case ItemId_Command_DeckNewDir: response = cmdDeckNewDir(qobject_cast<Command_DeckNewDir *>(command)); break; case ItemId_Command_DeckNewDir: response = cmdDeckNewDir(qobject_cast<Command_DeckNewDir *>(command)); break;
case ItemId_Command_DeckDelDir: response = cmdDeckDelDir(qobject_cast<Command_DeckDelDir *>(command)); break; case ItemId_Command_DeckDelDir: response = cmdDeckDelDir(qobject_cast<Command_DeckDelDir *>(command)); break;
case ItemId_Command_DeckNew: response = cmdDeckNew(qobject_cast<Command_DeckNew *>(command)); break;
case ItemId_Command_DeckDel: response = cmdDeckDel(qobject_cast<Command_DeckDel *>(command)); break; case ItemId_Command_DeckDel: response = cmdDeckDel(qobject_cast<Command_DeckDel *>(command)); break;
case ItemId_Command_DeckUpload: response = cmdDeckUpload(qobject_cast<Command_DeckUpload *>(command)); break; case ItemId_Command_DeckUpload: response = cmdDeckUpload(qobject_cast<Command_DeckUpload *>(command)); break;
case ItemId_Command_DeckDownload: response = cmdDeckDownload(qobject_cast<Command_DeckDownload *>(command)); break; case ItemId_Command_DeckDownload: response = cmdDeckDownload(qobject_cast<Command_DeckDownload *>(command)); break;

View file

@ -32,7 +32,6 @@ private:
virtual ResponseCode cmdDeckList(Command_DeckList *cmd) = 0; virtual ResponseCode cmdDeckList(Command_DeckList *cmd) = 0;
virtual ResponseCode cmdDeckNewDir(Command_DeckNewDir *cmd) = 0; virtual ResponseCode cmdDeckNewDir(Command_DeckNewDir *cmd) = 0;
virtual ResponseCode cmdDeckDelDir(Command_DeckDelDir *cmd) = 0; virtual ResponseCode cmdDeckDelDir(Command_DeckDelDir *cmd) = 0;
virtual ResponseCode cmdDeckNew(Command_DeckNew *cmd) = 0;
virtual ResponseCode cmdDeckDel(Command_DeckDel *cmd) = 0; virtual ResponseCode cmdDeckDel(Command_DeckDel *cmd) = 0;
virtual ResponseCode cmdDeckUpload(Command_DeckUpload *cmd) = 0; virtual ResponseCode cmdDeckUpload(Command_DeckUpload *cmd) = 0;
virtual ResponseCode cmdDeckDownload(Command_DeckDownload *cmd) = 0; virtual ResponseCode cmdDeckDownload(Command_DeckDownload *cmd) = 0;

View file

@ -1,3 +1,6 @@
[server]
port=4747
[authentication] [authentication]
method=none method=none

View file

@ -28,13 +28,12 @@ Servatrice::Servatrice(QObject *parent)
: Server(parent) : Server(parent)
{ {
ProtocolItem::initializeHash(); ProtocolItem::initializeHash();
settings = new QSettings("servatrice.ini", QSettings::IniFormat, this);
tcpServer = new QTcpServer(this); tcpServer = new QTcpServer(this);
connect(tcpServer, SIGNAL(newConnection()), this, SLOT(newConnection())); connect(tcpServer, SIGNAL(newConnection()), this, SLOT(newConnection()));
tcpServer->listen(QHostAddress::Any, 4747); // XXX make customizable tcpServer->listen(QHostAddress::Any, settings->value("server/port", 4747).toInt());
settings = new QSettings("servatrice.ini", QSettings::IniFormat, this);
QString dbType = settings->value("database/type").toString(); QString dbType = settings->value("database/type").toString();
if (dbType == "mysql") if (dbType == "mysql")
openDatabase(); openDatabase();

View file

@ -55,6 +55,16 @@ ServerSocketInterface::~ServerSocketInterface()
delete socket; delete socket;
} }
void ServerSocketInterface::itemFinishedReading()
{
Command *command = qobject_cast<Command *>(currentItem);
if (qobject_cast<InvalidCommand *>(command))
sendProtocolItem(new ProtocolResponse(command->getCmdId(), RespInvalidCommand));
else
processCommand(command);
currentItem = 0;
}
void ServerSocketInterface::readClient() void ServerSocketInterface::readClient()
{ {
xmlReader->addData(socket->readAll()); xmlReader->addData(socket->readAll());
@ -62,7 +72,7 @@ void ServerSocketInterface::readClient()
if (currentItem) { if (currentItem) {
if (!currentItem->read(xmlReader)) if (!currentItem->read(xmlReader))
return; return;
currentItem = 0; itemFinishedReading();
} }
while (!xmlReader->atEnd()) { while (!xmlReader->atEnd()) {
xmlReader->readNext(); xmlReader->readNext();
@ -77,14 +87,7 @@ void ServerSocketInterface::readClient()
currentItem = new InvalidCommand; currentItem = new InvalidCommand;
if (!currentItem->read(xmlReader)) if (!currentItem->read(xmlReader))
return; return;
else { itemFinishedReading();
Command *command = qobject_cast<Command *>(currentItem);
if (qobject_cast<InvalidCommand *>(command))
sendProtocolItem(new ProtocolResponse(command->getCmdId(), RespInvalidCommand));
else
processCommand(command);
currentItem = 0;
}
} }
} }
} }
@ -127,6 +130,11 @@ int ServerSocketInterface::getDeckPathId(int basePathId, QStringList path)
return getDeckPathId(id, path); return getDeckPathId(id, path);
} }
int ServerSocketInterface::getDeckPathId(const QString &path)
{
return getDeckPathId(0, path.split("/"));
}
void ServerSocketInterface::deckListHelper(Response_DeckList::Directory *folder) void ServerSocketInterface::deckListHelper(Response_DeckList::Directory *folder)
{ {
QSqlQuery query; QSqlQuery query;
@ -140,6 +148,15 @@ void ServerSocketInterface::deckListHelper(Response_DeckList::Directory *folder)
folder->append(newFolder); folder->append(newFolder);
deckListHelper(newFolder); deckListHelper(newFolder);
} }
query.prepare("select id, name from decklist_files where id_folder = :id_folder");
query.bindValue(":id_folder", folder->getId());
servatrice->execSqlQuery(query);
while (query.next()) {
Response_DeckList::File *newFile = new Response_DeckList::File(query.value(1).toString(), query.value(0).toInt());
folder->append(newFile);
}
} }
ResponseCode ServerSocketInterface::cmdDeckList(Command_DeckList *cmd) ResponseCode ServerSocketInterface::cmdDeckList(Command_DeckList *cmd)
@ -157,8 +174,7 @@ ResponseCode ServerSocketInterface::cmdDeckList(Command_DeckList *cmd)
ResponseCode ServerSocketInterface::cmdDeckNewDir(Command_DeckNewDir *cmd) ResponseCode ServerSocketInterface::cmdDeckNewDir(Command_DeckNewDir *cmd)
{ {
int folderId = getDeckPathId(0, cmd->getPath().split("/")); int folderId = getDeckPathId(cmd->getPath());
qDebug() << "folderId" << folderId;
if (folderId == -1) if (folderId == -1)
return RespNameNotFound; return RespNameNotFound;
@ -172,12 +188,31 @@ ResponseCode ServerSocketInterface::cmdDeckNewDir(Command_DeckNewDir *cmd)
return RespOk; return RespOk;
} }
ResponseCode ServerSocketInterface::cmdDeckDelDir(Command_DeckDelDir *cmd) void ServerSocketInterface::deckDelDirHelper(int basePathId)
{ {
QSqlQuery query;
query.prepare("select id from decklist_folders where id_parent = :id_parent");
query.bindValue(":id_parent", basePathId);
servatrice->execSqlQuery(query);
while (query.next())
deckDelDirHelper(query.value(0).toInt());
query.prepare("delete from decklist_files where id_folder = :id_folder");
query.bindValue(":id_folder", basePathId);
servatrice->execSqlQuery(query);
query.prepare("delete from decklist_folders where id = :id");
query.bindValue(":id", basePathId);
servatrice->execSqlQuery(query);
} }
ResponseCode ServerSocketInterface::cmdDeckNew(Command_DeckNew *cmd) ResponseCode ServerSocketInterface::cmdDeckDelDir(Command_DeckDelDir *cmd)
{ {
int basePathId = getDeckPathId(cmd->getPath());
if (basePathId == -1)
return RespNameNotFound;
deckDelDirHelper(basePathId);
} }
ResponseCode ServerSocketInterface::cmdDeckDel(Command_DeckDel *cmd) ResponseCode ServerSocketInterface::cmdDeckDel(Command_DeckDel *cmd)

View file

@ -42,14 +42,17 @@ private:
ProtocolItem *currentItem; ProtocolItem *currentItem;
int getDeckPathId(int basePathId, QStringList path); int getDeckPathId(int basePathId, QStringList path);
int getDeckPathId(const QString &path);
void deckListHelper(Response_DeckList::Directory *folder); void deckListHelper(Response_DeckList::Directory *folder);
ResponseCode cmdDeckList(Command_DeckList *cmd); ResponseCode cmdDeckList(Command_DeckList *cmd);
ResponseCode cmdDeckNewDir(Command_DeckNewDir *cmd); ResponseCode cmdDeckNewDir(Command_DeckNewDir *cmd);
void deckDelDirHelper(int basePathId);
ResponseCode cmdDeckDelDir(Command_DeckDelDir *cmd); ResponseCode cmdDeckDelDir(Command_DeckDelDir *cmd);
ResponseCode cmdDeckNew(Command_DeckNew *cmd);
ResponseCode cmdDeckDel(Command_DeckDel *cmd); ResponseCode cmdDeckDel(Command_DeckDel *cmd);
ResponseCode cmdDeckUpload(Command_DeckUpload *cmd); ResponseCode cmdDeckUpload(Command_DeckUpload *cmd);
ResponseCode cmdDeckDownload(Command_DeckDownload *cmd); ResponseCode cmdDeckDownload(Command_DeckDownload *cmd);
void itemFinishedReading();
public: public:
ServerSocketInterface(Servatrice *_server, QTcpSocket *_socket, QObject *parent = 0); ServerSocketInterface(Servatrice *_server, QTcpSocket *_socket, QObject *parent = 0);
~ServerSocketInterface(); ~ServerSocketInterface();