handle dead commands when the connection is lost before the reply gets processed

This commit is contained in:
Max-Wilhelm Bruker 2012-05-01 21:16:16 +02:00
parent 53afd65beb
commit e76502cf0e
4 changed files with 23 additions and 1 deletions

View file

@ -166,8 +166,14 @@ void RemoteClient::doDisconnectFromServer()
messageLength = 0; messageLength = 0;
QList<PendingCommand *> pc = pendingCommands.values(); QList<PendingCommand *> pc = pendingCommands.values();
for (int i = 0; i < pc.size(); i++) for (int i = 0; i < pc.size(); i++) {
Response response;
response.set_response_code(Response::RespNotConnected);
response.set_cmd_id(pc[i]->getCommandContainer().cmd_id());
pc[i]->processResponse(response);
delete pc[i]; delete pc[i];
}
pendingCommands.clear(); pendingCommands.clear();
setStatus(StatusDisconnected); setStatus(StatusDisconnected);

View file

@ -177,6 +177,9 @@ void TabDeckStorage::actUpload()
void TabDeckStorage::uploadFinished(const Response &r, const CommandContainer &commandContainer) void TabDeckStorage::uploadFinished(const Response &r, const CommandContainer &commandContainer)
{ {
if (r.response_code() != Response::RespOk)
return;
const Response_DeckUpload &resp = r.GetExtension(Response_DeckUpload::ext); const Response_DeckUpload &resp = r.GetExtension(Response_DeckUpload::ext);
const Command_DeckUpload &cmd = commandContainer.session_command(0).GetExtension(Command_DeckUpload::ext); const Command_DeckUpload &cmd = commandContainer.session_command(0).GetExtension(Command_DeckUpload::ext);
@ -208,6 +211,9 @@ void TabDeckStorage::actOpenRemoteDeck()
void TabDeckStorage::openRemoteDeckFinished(const Response &r) void TabDeckStorage::openRemoteDeckFinished(const Response &r)
{ {
if (r.response_code() != Response::RespOk)
return;
const Response_DeckDownload &resp = r.GetExtension(Response_DeckDownload::ext); const Response_DeckDownload &resp = r.GetExtension(Response_DeckDownload::ext);
// WndDeckEditor *deckEditor = new WndDeckEditor; // WndDeckEditor *deckEditor = new WndDeckEditor;
@ -243,6 +249,9 @@ void TabDeckStorage::actDownload()
void TabDeckStorage::downloadFinished(const Response &r, const CommandContainer &/*commandContainer*/, const QVariant &extraData) void TabDeckStorage::downloadFinished(const Response &r, const CommandContainer &/*commandContainer*/, const QVariant &extraData)
{ {
if (r.response_code() != Response::RespOk)
return;
const Response_DeckDownload &resp = r.GetExtension(Response_DeckDownload::ext); const Response_DeckDownload &resp = r.GetExtension(Response_DeckDownload::ext);
QString filePath = extraData.toString(); QString filePath = extraData.toString();

View file

@ -162,6 +162,9 @@ void TabReplays::actOpenRemoteReplay()
void TabReplays::openRemoteReplayFinished(const Response &r) void TabReplays::openRemoteReplayFinished(const Response &r)
{ {
if (r.response_code() != Response::RespOk)
return;
const Response_ReplayDownload &resp = r.GetExtension(Response_ReplayDownload::ext); const Response_ReplayDownload &resp = r.GetExtension(Response_ReplayDownload::ext);
GameReplay *replay = new GameReplay; GameReplay *replay = new GameReplay;
replay->ParseFromString(resp.replay_data()); replay->ParseFromString(resp.replay_data());
@ -197,6 +200,9 @@ void TabReplays::actDownload()
void TabReplays::downloadFinished(const Response &r, const CommandContainer &commandContainer, const QVariant &extraData) void TabReplays::downloadFinished(const Response &r, const CommandContainer &commandContainer, const QVariant &extraData)
{ {
if (r.response_code() != Response::RespOk)
return;
const Response_ReplayDownload &resp = r.GetExtension(Response_ReplayDownload::ext); const Response_ReplayDownload &resp = r.GetExtension(Response_ReplayDownload::ext);
QString filePath = extraData.toString(); QString filePath = extraData.toString();

View file

@ -1,5 +1,6 @@
message Response { message Response {
enum ResponseCode { enum ResponseCode {
RespNotConnected = -1;
RespNothing = 0; RespNothing = 0;
RespOk = 1; RespOk = 1;
RespNotInRoom = 2; RespNotInRoom = 2;