diff options
author | Morten Sorvig <msorvig@trolltech.com> | 2009-06-26 18:59:35 +0200 |
---|---|---|
committer | Morten Sorvig <msorvig@trolltech.com> | 2009-06-26 18:59:35 +0200 |
commit | f246e8ab44f26babdc2b756132d29797cee5c735 (patch) | |
tree | b5a824387ec10bd17c21b368786bec0b3470d8f3 /src | |
parent | 8e7cb36cf6122722ff5e37cedb1e4f746f5df9a1 (diff) |
Split the json event handling up into functions and add error handling
Diffstat (limited to 'src')
-rw-r--r-- | src/eventqueue.cpp | 68 | ||||
-rw-r--r-- | src/eventqueue.h | 3 |
2 files changed, 43 insertions, 28 deletions
diff --git a/src/eventqueue.cpp b/src/eventqueue.cpp index 9914277..22c098b 100644 --- a/src/eventqueue.cpp +++ b/src/eventqueue.cpp @@ -82,35 +82,49 @@ void EventQueue::handleRequest(HttpRequest *request, HttpResponse *response) // string object. } else if (path.startsWith("/json")) { QByteArray jsonText = path.mid(5); // remove "/json" + handleJsonRequest(jsonText, response); + } +} - // replace symbols that can't be a part of the url text. - jsonText.replace("%7B", "{"); - jsonText.replace("%7D", "}"); - jsonText.replace("%22", "\""); - - DEBUG << "json request" << jsonText; - json_object* request = json_tokener_parse(jsonText.data()); - json_object* type = json_object_object_get(request, "type"); - - QByteArray typeText = json_object_get_string(type); - DEBUG << typeText; - - if (typeText == "img") { - json_object* idObject = json_object_object_get(request, "id"); - const int id = json_object_get_int(idObject); - DEBUG << "id" << this << id << images.value(id).size(); - - QByteArray block; - QBuffer buffer(&block); - buffer.open(QIODevice::WriteOnly); - QImageWriter writer(&buffer, "png"); - writer.write(images.value(id)); - - response->setBody(block); - response->setContentType("image/png"); - } - json_object_put(request); //free +void EventQueue::handleJsonRequest(QByteArray jsonText, HttpResponse *response) +{ + // replace symbols that can't be a part of the url text. + jsonText.replace("%7B", "{"); + jsonText.replace("%7D", "}"); + jsonText.replace("%22", "\""); + + DEBUG << "json request" << jsonText; + json_object* jsonRequest = json_tokener_parse(jsonText.data()); + if (!jsonRequest) + return; + json_object* type = json_object_object_get(jsonRequest, "type"); + + QByteArray typeText = json_object_get_string(type); + DEBUG << typeText; + + if (typeText == "img") { + handleImageRequest(jsonRequest, response); } + json_object_put(jsonRequest); //free +} + +void EventQueue::handleImageRequest(json_object* jsonRequest, HttpResponse *response) +{ + json_object* idObject = json_object_object_get(jsonRequest, "id"); + if (!idObject) + return; + + const int id = json_object_get_int(idObject); + DEBUG << "id" << this << id << images.value(id).size(); + + QByteArray block; + QBuffer buffer(&block); + buffer.open(QIODevice::WriteOnly); + QImageWriter writer(&buffer, "png"); + writer.write(images.value(id)); + + response->setBody(block); + response->setContentType("image/png"); } void EventQueue::addUpdateEvent(int id, const QImage &image, QRect updateRect) diff --git a/src/eventqueue.h b/src/eventqueue.h index d54dadf..6cc1caf 100644 --- a/src/eventqueue.h +++ b/src/eventqueue.h @@ -31,7 +31,8 @@ public: void reset(); void handleRequest(HttpRequest *request, HttpResponse *response); - + void handleJsonRequest(QByteArray jsonText, HttpResponse *response); + void handleImageRequest(json_object* jsonRequest, HttpResponse *response); void addUpdateEvent(int id, const QImage &image, QRect updateRect); void addGeometryEvent(int id, QRect globalGeometry); void addParentChangeEvent(int id); |