Response::ResponseCode Server_ProtocolHandler::cmdJoinRoom(const Command_JoinRoom &cmd, ResponseContainer &rc) { if (authState == NotLoggedIn) return Response::RespLoginNeeded; if (rooms.contains(cmd.room_id())) return Response::RespContextError; QReadLocker serverLocker(&server->roomsLock); Server_Room *r = server->getRooms().value(cmd.room_id(), 0); if (!r) return Response::RespNameNotFound; QString roomPermission = r->getRoomPermission().toLower(); if (roomPermission != "none"){ if (roomPermission == "registered") { if (!(userInfo->user_level() & ServerInfo_User::IsRegistered)) return Response::RespUserLevelTooLow; } if (roomPermission == "moderator"){ if (!(userInfo->user_level() & ServerInfo_User::IsModerator)) return Response::RespUserLevelTooLow; } if (roomPermission == "administrator"){ if (!(userInfo->user_level() & ServerInfo_User::IsAdmin)) return Response::RespUserLevelTooLow; } } r->addClient(this); rooms.insert(r->getId(), r); Event_RoomSay joinMessageEvent; joinMessageEvent.set_message(r->getJoinMessage().toStdString()); joinMessageEvent.set_message_type(Event_RoomSay::Welcome); rc.enqueuePostResponseItem(ServerMessage::ROOM_EVENT, r->prepareRoomEvent(joinMessageEvent)); QReadLocker chatHistoryLocker(&r->historyLock); QList<ServerInfo_ChatMessage> chatHistory = r->getChatHistory(); ServerInfo_ChatMessage chatMessage; for (int i = 0; i < chatHistory.size(); ++i) { chatMessage = chatHistory.at(i); qDebug() << QString::fromStdString(chatMessage.message()).simplified(); Event_RoomSay roomChatHistory; roomChatHistory.set_message(chatMessage.sender_name() + ": " + chatMessage.message()); roomChatHistory.set_message_type(Event_RoomSay::ChatHistory); roomChatHistory.set_time_of(QDateTime::fromString(QString::fromStdString(chatMessage.time())).toMSecsSinceEpoch()); rc.enqueuePostResponseItem(ServerMessage::ROOM_EVENT, r->prepareRoomEvent(roomChatHistory)); } Response_JoinRoom *re = new Response_JoinRoom; r->getInfo(*re->mutable_room_info(), true); rc.setResponseExtension(re); return Response::RespOk; }
void TabLog::viewLogHistory_processResponse(const Response &resp) { const Response_ViewLogHistory &response = resp.GetExtension(Response_ViewLogHistory::ext); if (resp.response_code() != Response::RespOk) { QMessageBox::critical(static_cast<QWidget *>(parent()), tr("Message History"), tr("Failed to collect message history information.")); return; } if (response.log_message_size() == 0) { QMessageBox::information(static_cast<QWidget *>(parent()), tr("Message History"), tr("There are no messages for the selected filters.")); return; } int roomCounter = 0, gameCounter = 0, chatCounter = 0; roomTable->setRowCount(roomCounter); gameTable->setRowCount(gameCounter); chatTable->setRowCount(chatCounter); for (int i = 0; i < response.log_message_size(); ++i) { ServerInfo_ChatMessage message = response.log_message(i); if (QString::fromStdString(message.target_type()) == "room") { roomTable->insertRow(roomCounter); roomTable->setItem(roomCounter, 0, new QTableWidgetItem(QString::fromStdString(message.time()))); roomTable->setItem(roomCounter, 1, new QTableWidgetItem(QString::fromStdString(message.sender_name()))); roomTable->setItem(roomCounter, 2, new QTableWidgetItem(QString::fromStdString(message.sender_ip()))); roomTable->setItem(roomCounter, 3, new QTableWidgetItem(QString::fromStdString(message.message()))); roomTable->setItem(roomCounter, 4, new QTableWidgetItem(QString::fromStdString(message.target_id()))); roomTable->setItem(roomCounter, 5, new QTableWidgetItem(QString::fromStdString(message.target_name()))); ++roomCounter; } if (QString::fromStdString(message.target_type()) == "game") { gameTable->insertRow(gameCounter); gameTable->setItem(gameCounter, 0, new QTableWidgetItem(QString::fromStdString(message.time()))); gameTable->setItem(gameCounter, 1, new QTableWidgetItem(QString::fromStdString(message.sender_name()))); gameTable->setItem(gameCounter, 2, new QTableWidgetItem(QString::fromStdString(message.sender_ip()))); gameTable->setItem(gameCounter, 3, new QTableWidgetItem(QString::fromStdString(message.message()))); gameTable->setItem(gameCounter, 4, new QTableWidgetItem(QString::fromStdString(message.target_id()))); gameTable->setItem(gameCounter, 5, new QTableWidgetItem(QString::fromStdString(message.target_name()))); ++gameCounter; } if (QString::fromStdString(message.target_type()) == "chat") { chatTable->insertRow(chatCounter); chatTable->setItem(chatCounter, 0, new QTableWidgetItem(QString::fromStdString(message.time()))); chatTable->setItem(chatCounter, 1, new QTableWidgetItem(QString::fromStdString(message.sender_name()))); chatTable->setItem(chatCounter, 2, new QTableWidgetItem(QString::fromStdString(message.sender_ip()))); chatTable->setItem(chatCounter, 3, new QTableWidgetItem(QString::fromStdString(message.message()))); chatTable->setItem(chatCounter, 4, new QTableWidgetItem(QString::fromStdString(message.target_id()))); chatTable->setItem(chatCounter, 5, new QTableWidgetItem(QString::fromStdString(message.target_name()))); ++chatCounter; } } if (roomCounter) { roomTable->show(); roomTable->resizeColumnsToContents(); } else { roomTable->hide(); } if (gameCounter) { gameTable->resizeColumnsToContents(); gameTable->show(); } else { gameTable->hide(); } if (chatCounter) { chatTable->resizeColumnsToContents(); chatTable->show(); } else { chatTable->hide(); } }
QList<ServerInfo_ChatMessage> Servatrice_DatabaseInterface::getMessageLogHistory(const QString &user, const QString &ipaddress, const QString &gamename, const QString &gameid, const QString &message, bool &chat, bool &game, bool &room, int &range, int &maxresults) { QList<ServerInfo_ChatMessage> results; ServerInfo_ChatMessage chatMessage; if (!checkSql()) return results; // BUILD QUERY STRING BASED ON PASSED IN VALUES QString queryString = "SELECT * FROM {prefix}_log WHERE `sender_ip` IS NOT NULL"; if (!user.isEmpty()) queryString.append(" AND (`sender_name` = :user_name OR `target_name` = :user_name)"); if (!ipaddress.isEmpty()) queryString.append(" AND `sender_ip` = :ip_to_find"); if (!gameid.isEmpty()) queryString.append(" AND (`target_id` = :game_id AND `target_type` = 'game')"); if (!gamename.isEmpty()) queryString.append(" AND (`target_name` = :game_name AND `target_type` = 'game')"); if (!message.isEmpty()) queryString.append(" AND `log_message` LIKE :log_message"); if (chat || game || room) { queryString.append(" AND ("); if (chat) queryString.append("`target_type` = 'chat'"); if (game) { if (chat) queryString.append(" OR `target_type` = 'game'"); else queryString.append("`target_type` = 'game'"); } if (room) { if (game || chat) queryString.append(" OR `target_type` = 'room'"); else queryString.append("`target_type` = 'room'"); } queryString.append(")"); } if (range) queryString.append(" AND log_time >= DATE_SUB(now(), INTERVAL :range_time HOUR)"); if (maxresults) queryString.append(" LIMIT :limit_size"); QSqlQuery *query = prepareQuery(queryString); if (!user.isEmpty()) { query->bindValue(":user_name", user); } if (!ipaddress.isEmpty()) { query->bindValue(":ip_to_find", ipaddress); } if (!gameid.isEmpty()) { query->bindValue(":game_id", gameid); } if (!gamename.isEmpty()) { query->bindValue(":game_name", gamename); } if (!message.isEmpty()) { query->bindValue(":log_message", message); } if (range) { query->bindValue(":range_time", range); } if (maxresults) { query->bindValue(":limit_size", maxresults); } if (!execSqlQuery(query)) { qDebug("Failed to collect log history information: SQL Error"); return results; } while (query->next()) { chatMessage.set_time(QString(query->value(0).toString()).toStdString()); chatMessage.set_sender_id(QString(query->value(1).toString()).toStdString()); chatMessage.set_sender_name(QString(query->value(2).toString()).toStdString()); chatMessage.set_sender_ip(QString(query->value(3).toString()).toStdString()); chatMessage.set_message(QString(query->value(4).toString()).toStdString()); chatMessage.set_target_type(QString(query->value(5).toString()).toStdString()); chatMessage.set_target_id(QString(query->value(6).toString()).toStdString()); chatMessage.set_target_name(QString(query->value(7).toString()).toStdString()); results << chatMessage; } return results; }