Fix chat example (fixes #16).
This commit is contained in:
@@ -20,45 +20,34 @@
|
||||
* IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include <QJsonArray>
|
||||
#include <QJsonDocument>
|
||||
#include <QJsonObject>
|
||||
#include <QVariantMap>
|
||||
|
||||
#include "apihandler.h"
|
||||
|
||||
QVariantMap ApiHandler::get_messages(const QVariantMap &query)
|
||||
void ApiHandler::messages(QHttpSocket *socket)
|
||||
{
|
||||
// Ensure an index was supplied
|
||||
if (!query.contains("index")) {
|
||||
return QVariantMap();
|
||||
}
|
||||
QJsonObject object;
|
||||
object.insert("messages", QJsonArray::fromStringList(mMessages));
|
||||
socket->writeJson(QJsonDocument(object));
|
||||
}
|
||||
|
||||
int index = query.value("index").toInt();
|
||||
QVariantList messages;
|
||||
|
||||
// Construct a list of all messages with an index higher than the one
|
||||
// that was provided as a parameter
|
||||
if (index >= -1 && index < mMessages.count()) {
|
||||
for (QStringList::const_iterator i = mMessages.constBegin() + index + 1;
|
||||
i != mMessages.constEnd(); ++i) {
|
||||
QVariantMap data;
|
||||
data.insert("index", i - mMessages.constBegin());
|
||||
data.insert("message", *i);
|
||||
messages.append(data);
|
||||
void ApiHandler::messagesNew(QHttpSocket *socket)
|
||||
{
|
||||
QJsonDocument document;
|
||||
if (socket->readJson(document)) {
|
||||
QVariantMap data = document.object().toVariantMap();
|
||||
if (data.contains("message")) {
|
||||
mMessages.append(data.value("message").toString());
|
||||
socket->writeHeaders();
|
||||
socket->close();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// Return the list of messages
|
||||
QVariantMap data;
|
||||
data.insert("messages", messages);
|
||||
return data;
|
||||
}
|
||||
|
||||
|
||||
QVariantMap ApiHandler::post_newMessage(const QVariantMap &query, const QVariantMap ¶ms)
|
||||
{
|
||||
// Ensure that a valid message was supplied
|
||||
if (!params.contains("message")) {
|
||||
return QVariantMap();
|
||||
}
|
||||
|
||||
// Add the new message to the list
|
||||
mMessages.append(params.value("message").toString());
|
||||
return QVariantMap();
|
||||
// If execution reaches this point, malformed data was supplied
|
||||
socket->writeError(QHttpSocket::BadRequest);
|
||||
}
|
||||
|
||||
@@ -23,19 +23,19 @@
|
||||
#ifndef CHAT_APIHANDLER_H
|
||||
#define CHAT_APIHANDLER_H
|
||||
|
||||
#include <QObject>
|
||||
#include <QStringList>
|
||||
#include <QVariantMap>
|
||||
|
||||
#include <QHttpEngine/QObjectHandler>
|
||||
#include <QHttpEngine/QHttpSocket>
|
||||
|
||||
class ApiHandler : public QObjectHandler
|
||||
class ApiHandler : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public Q_SLOTS:
|
||||
|
||||
QVariantMap get_messages(const QVariantMap &query);
|
||||
QVariantMap post_newMessage(const QVariantMap &query, const QVariantMap ¶ms);
|
||||
void messages(QHttpSocket *socket);
|
||||
void messagesNew(QHttpSocket *socket);
|
||||
|
||||
private:
|
||||
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
#include <QHttpEngine/QFilesystemHandler>
|
||||
#include <QHttpEngine/QHttpHandler>
|
||||
#include <QHttpEngine/QHttpServer>
|
||||
#include <QHttpEngine/QObjectHandler>
|
||||
|
||||
#include "apihandler.h"
|
||||
|
||||
@@ -66,7 +67,10 @@ int main(int argc, char * argv[])
|
||||
QFilesystemHandler handler(":/static");
|
||||
handler.addRedirect(QRegExp("^$"), "/index.html");
|
||||
|
||||
ApiHandler apiHandler;
|
||||
ApiHandler renameMe;
|
||||
QObjectHandler apiHandler;
|
||||
apiHandler.registerMethod("messages", &renameMe, &ApiHandler::messages);
|
||||
apiHandler.registerMethod("messages/new", &renameMe, &ApiHandler::messagesNew);
|
||||
handler.addSubHandler(QRegExp("api/"), &apiHandler);
|
||||
|
||||
QHttpServer server(&handler);
|
||||
|
||||
@@ -32,7 +32,7 @@ body {
|
||||
padding: 4px;
|
||||
}
|
||||
|
||||
.messages {
|
||||
.container {
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
|
||||
@@ -13,10 +13,12 @@
|
||||
<textarea id="input" placeholder="Type here and press enter..."></textarea>
|
||||
</div>
|
||||
|
||||
<div class="messages">
|
||||
<div class="container">
|
||||
<div class="message system">
|
||||
Greetings! Welcome to the QHttpEngine chat demo. Please type a message using the entry box below.
|
||||
</div>
|
||||
<div class="messages">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="spacer"></div>
|
||||
|
||||
@@ -1,25 +1,23 @@
|
||||
$(function() {
|
||||
|
||||
var index = -1,
|
||||
$document = $(document),
|
||||
var $document = $(document),
|
||||
$messages = $('.messages');
|
||||
|
||||
// Retrieve all messages after the specified index
|
||||
function update() {
|
||||
$.ajax({
|
||||
url: '/api/messages',
|
||||
data: {index: index},
|
||||
contentType: 'application/json',
|
||||
complete: function() {
|
||||
window.setTimeout(update, 2000);
|
||||
},
|
||||
success: function(data) {
|
||||
$.each(data.messages, function(i, e) {
|
||||
$messages.empty();
|
||||
$.each(data.messages, function() {
|
||||
$('<div>')
|
||||
.addClass('message')
|
||||
.text(e.message)
|
||||
.text(this)
|
||||
.appendTo($messages);
|
||||
index = e.index;
|
||||
});
|
||||
$document.scrollTop(10000);
|
||||
}
|
||||
@@ -30,10 +28,10 @@ $(function() {
|
||||
|
||||
// Find the message input box and set the appropriate handler for [enter]
|
||||
var $input = $('#input').focus().keypress(function(e) {
|
||||
if(e.which == 13) {
|
||||
if(e.which === 13) {
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: '/api/newMessage',
|
||||
url: '/api/messages/new',
|
||||
data: JSON.stringify({message: $(this).val()}),
|
||||
contentType: 'application/json'
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user