From d251078feb59c966dcb4dfc747b1a310a4d60b63 Mon Sep 17 00:00:00 2001 From: Max-Wilhelm Bruker Date: Mon, 26 Mar 2012 00:54:44 +0200 Subject: [PATCH] fixed user list bug in threaded client, fixed buddy list crash in server --- cockatrice/src/abstractclient.cpp | 3 ++- cockatrice/src/player.cpp | 2 +- cockatrice/src/tab_userlists.cpp | 1 + cockatrice/src/window_main.cpp | 2 +- servatrice/src/serversocketinterface.cpp | 16 ++++++++-------- 5 files changed, 13 insertions(+), 11 deletions(-) diff --git a/cockatrice/src/abstractclient.cpp b/cockatrice/src/abstractclient.cpp index 19d9c316..b359b1e2 100644 --- a/cockatrice/src/abstractclient.cpp +++ b/cockatrice/src/abstractclient.cpp @@ -62,8 +62,9 @@ void AbstractClient::processProtocolItem(const ServerMessage &item) PendingCommand *pend = pendingCommands.value(cmdId, 0); if (!pend) return; - pendingCommands.remove(cmdId); + locker.unlock(); + pend->processResponse(response); pend->deleteLater(); break; diff --git a/cockatrice/src/player.cpp b/cockatrice/src/player.cpp index edb876f5..106ec5e2 100644 --- a/cockatrice/src/player.cpp +++ b/cockatrice/src/player.cpp @@ -614,7 +614,7 @@ void Player::retranslateUi() aPeek->setText(tr("&Peek at card face")); aClone->setText(tr("&Clone")); aClone->setShortcut(tr("Ctrl+H")); - aAttach->setText(tr("&Attach to card...")); + aAttach->setText(tr("Attac&h to card...")); aAttach->setShortcut(tr("Ctrl+A")); aUnattach->setText(tr("Unattac&h")); aDrawArrow->setText(tr("&Draw arrow...")); diff --git a/cockatrice/src/tab_userlists.cpp b/cockatrice/src/tab_userlists.cpp index d43fe41e..ab489b5e 100644 --- a/cockatrice/src/tab_userlists.cpp +++ b/cockatrice/src/tab_userlists.cpp @@ -107,6 +107,7 @@ void TabUserLists::processUserLeftEvent(const Event_UserLeft &event) void TabUserLists::buddyListReceived(const QList &_buddyList) { + qDebug() << "BUDDY LIST" << _buddyList.size(); for (int i = 0; i < _buddyList.size(); ++i) buddyList->processUserInfo(_buddyList[i], false); buddyList->sortItems(); diff --git a/cockatrice/src/window_main.cpp b/cockatrice/src/window_main.cpp index 7e76a0a4..f2ede16b 100644 --- a/cockatrice/src/window_main.cpp +++ b/cockatrice/src/window_main.cpp @@ -348,7 +348,7 @@ MainWindow::MainWindow(QWidget *parent) connect(client, SIGNAL(serverTimeout()), this, SLOT(serverTimeout())); connect(client, SIGNAL(statusChanged(ClientStatus)), this, SLOT(statusChanged(ClientStatus))); connect(client, SIGNAL(protocolVersionMismatch(int, int)), this, SLOT(protocolVersionMismatch(int, int))); - connect(client, SIGNAL(userInfoChanged(const ServerInfo_User &)), this, SLOT(userInfoReceived(const ServerInfo_User &))); + connect(client, SIGNAL(userInfoChanged(const ServerInfo_User &)), this, SLOT(userInfoReceived(const ServerInfo_User &)), Qt::BlockingQueuedConnection); clientThread = new QThread(this); client->moveToThread(clientThread); diff --git a/servatrice/src/serversocketinterface.cpp b/servatrice/src/serversocketinterface.cpp index 523a676d..869ef555 100644 --- a/servatrice/src/serversocketinterface.cpp +++ b/servatrice/src/serversocketinterface.cpp @@ -197,10 +197,10 @@ Response::ResponseCode ServerSocketInterface::cmdAddToList(const Command_AddToLi if (!servatrice->execSqlQuery(query)) return Response::RespInternalError; - Event_AddToList *event = new Event_AddToList; - event->set_list_name(cmd.list()); - event->mutable_user_info()->CopyFrom(servatrice->getUserData(user)); - rc.enqueuePreResponseItem(ServerMessage::SESSION_EVENT, event); + Event_AddToList event; + event.set_list_name(cmd.list()); + event.mutable_user_info()->CopyFrom(servatrice->getUserData(user)); + rc.enqueuePreResponseItem(ServerMessage::SESSION_EVENT, prepareSessionEvent(event)); return Response::RespOk; } @@ -236,10 +236,10 @@ Response::ResponseCode ServerSocketInterface::cmdRemoveFromList(const Command_Re if (!servatrice->execSqlQuery(query)) return Response::RespInternalError; - Event_RemoveFromList *event = new Event_RemoveFromList; - event->set_list_name(cmd.list()); - event->set_user_name(cmd.user_name()); - rc.enqueuePreResponseItem(ServerMessage::SESSION_EVENT, event); + Event_RemoveFromList event; + event.set_list_name(cmd.list()); + event.set_user_name(cmd.user_name()); + rc.enqueuePreResponseItem(ServerMessage::SESSION_EVENT, prepareSessionEvent(event)); return Response::RespOk; }