From a36adb0e936fdf0a05e2272c22a3b7922daba79f Mon Sep 17 00:00:00 2001 From: wuzirui Date: Tue, 31 Aug 2021 15:40:18 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=8E=86=E5=8F=B2?= =?UTF-8?q?=E6=B6=88=E6=81=AF=E7=9A=84=E5=80=9F=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Server/databaseoperation.cpp | 8 ++++++++ Server/databaseoperation.h | 1 + 2 files changed, 9 insertions(+) diff --git a/Server/databaseoperation.cpp b/Server/databaseoperation.cpp index eca5f3a..b5afdd7 100644 --- a/Server/databaseoperation.cpp +++ b/Server/databaseoperation.cpp @@ -239,6 +239,14 @@ QList DatabaseOperation::querySessionsByMember(const char * username){ return member_List; } +//查询会话的所有历史消息 +QList DatabaseOperation::queryMessageBySession(int sessionID) { + QList ret; + QSqlQuery query; + QString sql = "SELECT MessageID FROM Message WHERE SessionID = " + QString::number(sessionID); +} + + bool DatabaseOperation::attemptLogIn(QString username, QString password) const { //用户名检测 QSqlQuery query(database); diff --git a/Server/databaseoperation.h b/Server/databaseoperation.h index 9b90e3e..36d03f9 100644 --- a/Server/databaseoperation.h +++ b/Server/databaseoperation.h @@ -42,6 +42,7 @@ public: QList queryMembersBySession(int sessionID); QList querySessionsByMember(const char * username); + QList queryMessageBySession(int sessionID); QList getMessageListBySessionID(int SessionId) const; OnlineMessage * findMessage(int sessionId, int MessageId); -- Gitee From a964ba7b6e9f8fd97a1e75f997ab8a6977c925bc Mon Sep 17 00:00:00 2001 From: wuzirui Date: Tue, 31 Aug 2021 17:34:42 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E8=81=8A=E5=A4=A9=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=E5=8E=86=E5=8F=B2=E6=B6=88=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Client/main.cpp | 2 +- Client/mainwindow.cpp | 2 ++ Server/databaseoperation.cpp | 22 ++++++++++++++++------ Server/messagemodel.cpp | 9 +++++++++ Server/messagemodel.h | 2 +- Server/operations.cpp | 10 ++++++++-- Server/serverdatacenter.cpp | 1 - 7 files changed, 37 insertions(+), 11 deletions(-) diff --git a/Client/main.cpp b/Client/main.cpp index df9655d..1a1c577 100644 --- a/Client/main.cpp +++ b/Client/main.cpp @@ -36,7 +36,7 @@ int main(int argc, char *argv[]) QString ip = settings.contains("Server IP") ? settings["Server IP"].toString() : "127.0.0.1"; int port = settings.contains("Port") ? settings["Port"].toInt() : 8888; #else - QString ip = "10.194.52.79"; + QString ip = "10.194.52.201"; int port = 8888; #endif qDebug() << "IP = " << ip << ", port = " << port; diff --git a/Client/mainwindow.cpp b/Client/mainwindow.cpp index ece210a..d4dd60e 100644 --- a/Client/mainwindow.cpp +++ b/Client/mainwindow.cpp @@ -30,6 +30,8 @@ void MainWindow::dealMessage(Message *messageW, QListWidgetItem *item, QString t item->setSizeHint(size); //设置item基本规格 同widget messageW->setTextContent(text, time, size, type); //设置message基本内容 ui->listWidget->setItemWidget(item, messageW); //将message的内容 在给定的 item中显示 + + ui->listWidget->setCurrentRow(ui->listWidget->count()-1); } void MainWindow::dealMessageTime(QString curMsgTime) diff --git a/Server/databaseoperation.cpp b/Server/databaseoperation.cpp index b5afdd7..abc493d 100644 --- a/Server/databaseoperation.cpp +++ b/Server/databaseoperation.cpp @@ -116,7 +116,7 @@ QList DatabaseOperation::findAllSessions() { QList DatabaseOperation::findAllMessages() { QList ret; QSqlQuery query; - if (!query.exec("SELECT SessionID, MessageID, senderUsername, MessageText, Profile FROM messages")) { + if (query.exec("SELECT SessionID, MessageID, senderUsername, MessageText, Profile FROM Message")) { while (query.next()) { int sessionID = query.value(0).toInt(); int msgId = query.value(1).toInt(); @@ -243,7 +243,16 @@ QList DatabaseOperation::querySessionsByMember(const char * username){ QList DatabaseOperation::queryMessageBySession(int sessionID) { QList ret; QSqlQuery query; - QString sql = "SELECT MessageID FROM Message WHERE SessionID = " + QString::number(sessionID); + QString sql = "SELECT MessageID FROM Message WHERE SessionID = (?)"; + query.prepare(sql); query.addBindValue(sessionID); + if (!query.exec()) { + qDebug() << "queryMessageBySession: " << query.lastError(); + return ret; + } + while (query.next()) { + ret.append(query.value(0).toInt()); + } + return ret; } @@ -322,7 +331,7 @@ OnlineUserModel & ServerDataCenter::getUser(QString username) { } OnlineMessage & ServerDataCenter::getMessage(int SessionId, int MessageId) { - if (_getMessage(SessionId, MessageId)) throw "Not exist"; + if (_getMessage(SessionId, MessageId) == nullptr) throw "Not exist"; return *messages[{SessionId, MessageId}]; } @@ -344,9 +353,10 @@ OnlineSession* ServerDataCenter::_getSession(int SessionId) { } OnlineMessage* ServerDataCenter::_getMessage(int SessionId, int MessageId) { - if (messages.contains({SessionId, MessageId})) - return messages[{SessionId, MessageId}]; - return nullptr; + OnlineMessage * ret = nullptr; + if (messages.contains(QPair({SessionId, MessageId}))) + ret = messages[QPair({SessionId, MessageId})]; + return ret; } OnlineUserModel * DatabaseOperation::findUser(QString username) { diff --git a/Server/messagemodel.cpp b/Server/messagemodel.cpp index 33bacfe..9472682 100644 --- a/Server/messagemodel.cpp +++ b/Server/messagemodel.cpp @@ -48,3 +48,12 @@ OnlineMessage::OnlineMessage(int MessageID, int SessionID, QString sender, QStri profile = Profile; this->setParent(parent); } + +QJsonObject OnlineMessage::generateJsonOutput() const { + QJsonObject ret = {{ "MsgType", "SessionMessage" }}; + ret["SessionID"] = sessionID; + ret["MessageID"] = messageID; + ret["SenderName"] = senderUsername; + ret["Body"] = QJsonObject({{"Text", text}, {"Profile", QJsonObject()}}); + return ret; +} diff --git a/Server/messagemodel.h b/Server/messagemodel.h index 9b68c62..d7559ab 100644 --- a/Server/messagemodel.h +++ b/Server/messagemodel.h @@ -24,7 +24,6 @@ public: enum class Type { Offline, Online }; virtual Type getType() const { return Type::Offline; } - QJsonObject generateJsonOutput() const; signals: @@ -44,6 +43,7 @@ public: explicit OnlineMessage(QJsonObject json, MessageModel * parent = nullptr); explicit OnlineMessage(int MessageID, int SessionID, QString sender, QString text, QJsonObject Profile, MessageModel * parent = nullptr); int getMessageID() const override { return messageID; } + QJsonObject generateJsonOutput() const; private: int messageID; }; diff --git a/Server/operations.cpp b/Server/operations.cpp index 6a74900..533e1a6 100644 --- a/Server/operations.cpp +++ b/Server/operations.cpp @@ -30,15 +30,21 @@ resp Operations::loginResponse(QJsonObject json) { auto sessionlist = db.querySessionsByMember(username.toUtf8().data()); for (int i = 0; i < sessionlist.size(); i++) { - auto userlist = db.queryMembersBySession(sessionlist.at(i)); + int ssid = sessionlist.at(i); + auto userlist = db.queryMembersBySession(ssid); for (int j = 0; j < userlist.size(); j++) { auto cur = userlist.at(j); if (cur == username) continue; auto & curuser = dcenter.getUser(cur); ret.append(curuser.generateUserModelJson()); + + } + ret.append(dcenter.getSession(ssid).generateJsonFromData()); + auto msglist = db.queryMessageBySession(sessionlist.at(i)); + for (int j = 0; j < msglist.size(); j++) { + ret.append(dcenter.getMessage(ssid, msglist[j]).generateJsonOutput()); } - ret.append(dcenter.getSession(sessionlist.at(i)).generateJsonFromData()); } return ret; } diff --git a/Server/serverdatacenter.cpp b/Server/serverdatacenter.cpp index 20076d6..358360b 100644 --- a/Server/serverdatacenter.cpp +++ b/Server/serverdatacenter.cpp @@ -28,7 +28,6 @@ void ServerDataCenter::registerMessage(OnlineMessage *msg) { messages[{msg->getSessionID(), msg->getMessageID()}] = msg; msg->setParent(this); registeredObjects.append(msg); - qDebug() << "### ServerDataCenter Down"; } -- Gitee