Possibly fix #1598

This commit is contained in:
Fabio Bas 2015-12-15 16:58:44 +01:00
parent 7e6972a358
commit 25d77fb64a
4 changed files with 14 additions and 5 deletions

View file

@ -19,6 +19,10 @@ if(POLICY CMP0048)
cmake_policy(SET CMP0048 OLD) cmake_policy(SET CMP0048 OLD)
endif() endif()
if(POLICY CMP0064)
cmake_policy(SET CMP0064 OLD)
endif()
set(PROJECT_NAME "Cockatrice") set(PROJECT_NAME "Cockatrice")
# Default to "Release" build type # Default to "Release" build type

View file

@ -603,8 +603,11 @@ Response::ResponseCode Server_ProtocolHandler::cmdJoinRoom(const Command_JoinRoo
joinMessageEvent.set_message_type(Event_RoomSay::Welcome); joinMessageEvent.set_message_type(Event_RoomSay::Welcome);
rc.enqueuePostResponseItem(ServerMessage::ROOM_EVENT, r->prepareRoomEvent(joinMessageEvent)); rc.enqueuePostResponseItem(ServerMessage::ROOM_EVENT, r->prepareRoomEvent(joinMessageEvent));
ServerInfo_ChatMessage chatMessage; for (int i = 0; i < r->chatHistory.size(); ++i) { QReadLocker chatHistoryLocker(&r->historyLock);
chatMessage = r->chatHistory.at(i); 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(); qDebug() << QString::fromStdString(chatMessage.message()).simplified();
Event_RoomSay roomChatHistory; Event_RoomSay roomChatHistory;
roomChatHistory.set_message(chatMessage.sender_name() + ": " + chatMessage.message()); roomChatHistory.set_message(chatMessage.sender_name() + ": " + chatMessage.message());

View file

@ -236,7 +236,6 @@ void Server_Room::say(const QString &userName, const QString &s, bool sendToIsl)
sendRoomEvent(prepareRoomEvent(event), sendToIsl); sendRoomEvent(prepareRoomEvent(event), sendToIsl);
if (chatHistorySize != 0) { if (chatHistorySize != 0) {
ServerInfo_ChatMessage chatMessage; ServerInfo_ChatMessage chatMessage;
QDateTime dateTime = dateTime.currentDateTimeUtc(); QDateTime dateTime = dateTime.currentDateTimeUtc();
QString dateTimeString = dateTime.toString(); QString dateTimeString = dateTime.toString();
@ -244,10 +243,12 @@ void Server_Room::say(const QString &userName, const QString &s, bool sendToIsl)
chatMessage.set_sender_name(userName.toStdString()); chatMessage.set_sender_name(userName.toStdString());
chatMessage.set_message(s.simplified().toStdString()); chatMessage.set_message(s.simplified().toStdString());
historyLock.lockForWrite();
if (chatHistory.size() >= chatHistorySize) if (chatHistory.size() >= chatHistorySize)
chatHistory.removeAt(0); chatHistory.removeAt(0);
chatHistory << chatMessage; chatHistory << chatMessage;
historyLock.unlock();
} }
} }

View file

@ -42,12 +42,13 @@ private:
QMap<int, ServerInfo_Game> externalGames; QMap<int, ServerInfo_Game> externalGames;
QMap<QString, Server_ProtocolHandler *> users; QMap<QString, Server_ProtocolHandler *> users;
QMap<QString, ServerInfo_User_Container> externalUsers; QMap<QString, ServerInfo_User_Container> externalUsers;
QList<ServerInfo_ChatMessage> chatHistory;
private slots: private slots:
void broadcastGameListUpdate(const ServerInfo_Game &gameInfo, bool sendToIsl = true); void broadcastGameListUpdate(const ServerInfo_Game &gameInfo, bool sendToIsl = true);
public: public:
mutable QReadWriteLock usersLock; mutable QReadWriteLock usersLock;
mutable QReadWriteLock gamesLock; mutable QReadWriteLock gamesLock;
QList<ServerInfo_ChatMessage> chatHistory; mutable QReadWriteLock historyLock;
Server_Room(int _id, int _chatHistorySize, const QString &_name, const QString &_description, const QString &_permissionLevel, bool _autoJoin, const QString &_joinMessage, const QStringList &_gameTypes, Server *parent ); Server_Room(int _id, int _chatHistorySize, const QString &_name, const QString &_description, const QString &_permissionLevel, bool _autoJoin, const QString &_joinMessage, const QStringList &_gameTypes, Server *parent );
~Server_Room(); ~Server_Room();
int getId() const { return id; } int getId() const { return id; }
@ -63,7 +64,7 @@ public:
const ServerInfo_Room &getInfo(ServerInfo_Room &result, bool complete, bool showGameTypes = false, bool includeExternalData = true) const; const ServerInfo_Room &getInfo(ServerInfo_Room &result, bool complete, bool showGameTypes = false, bool includeExternalData = true) const;
int getGamesCreatedByUser(const QString &name) const; int getGamesCreatedByUser(const QString &name) const;
QList<ServerInfo_Game> getGamesOfUser(const QString &name) const; QList<ServerInfo_Game> getGamesOfUser(const QString &name) const;
QList<ServerInfo_ChatMessage> getChatHistory() { return chatHistory; } QList<ServerInfo_ChatMessage> & getChatHistory() { return chatHistory; }
void addClient(Server_ProtocolHandler *client); void addClient(Server_ProtocolHandler *client);
void removeClient(Server_ProtocolHandler *client); void removeClient(Server_ProtocolHandler *client);