Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Donald Haase
Cockatrice
Commits
761d549f
Commit
761d549f
authored
Jan 07, 2015
by
Gavin Bisesi
Browse files
Merge pull request #519 from ctrlaltca/message_log
Message log
parents
37a4c0d0
51735613
Changes
9
Hide whitespace changes
Inline
Side-by-side
common/server.cpp
View file @
761d549f
...
...
@@ -345,6 +345,8 @@ void Server::externalRoomSay(int roomId, const QString &userName, const QString
return
;
}
room
->
say
(
userName
,
message
,
false
);
getDatabaseInterface
()
->
logMessage
(
0
,
userName
,
"ISL"
,
message
,
Server_DatabaseInterface
::
MessageTargetIslRoom
,
room
->
getId
(),
room
->
getName
());
}
void
Server
::
externalRoomGameListChanged
(
int
roomId
,
const
ServerInfo_Game
&
gameInfo
)
...
...
common/server_database_interface.h
View file @
761d549f
...
...
@@ -35,6 +35,9 @@ public:
virtual
bool
userSessionExists
(
const
QString
&
/* userName */
)
{
return
false
;
}
virtual
bool
getRequireRegistration
()
{
return
false
;
}
enum
LogMessage_TargetType
{
MessageTargetRoom
,
MessageTargetGame
,
MessageTargetChat
,
MessageTargetIslRoom
};
virtual
void
logMessage
(
const
int
senderId
,
const
QString
&
senderName
,
const
QString
&
senderIp
,
const
QString
&
logMessage
,
LogMessage_TargetType
targetType
,
const
int
targetId
,
const
QString
&
targetName
)
{
};
};
#endif
common/server_game.cpp
View file @
761d549f
...
...
@@ -436,7 +436,7 @@ void Server_Game::addPlayer(Server_AbstractUserInterface *userInterface, Respons
{
QMutexLocker
locker
(
&
gameMutex
);
Server_Player
*
newPlayer
=
new
Server_Player
(
this
,
nextPlayerId
++
,
userInterface
->
copyUserInfo
(
true
,
true
),
spectator
,
userInterface
);
Server_Player
*
newPlayer
=
new
Server_Player
(
this
,
nextPlayerId
++
,
userInterface
->
copyUserInfo
(
true
,
true
,
true
),
spectator
,
userInterface
);
newPlayer
->
moveToThread
(
thread
());
Event_Join
joinEvent
;
...
...
common/server_player.cpp
View file @
761d549f
...
...
@@ -767,6 +767,8 @@ Response::ResponseCode Server_Player::cmdGameSay(const Command_GameSay &cmd, Res
Event_GameSay
event
;
event
.
set_message
(
cmd
.
message
());
ges
.
enqueueGameEvent
(
event
,
playerId
);
game
->
getRoom
()
->
getServer
()
->
getDatabaseInterface
()
->
logMessage
(
userInfo
->
id
(),
QString
::
fromStdString
(
userInfo
->
name
()),
QString
::
fromStdString
(
userInfo
->
address
()),
QString
::
fromStdString
(
cmd
.
message
()),
Server_DatabaseInterface
::
MessageTargetGame
,
game
->
getGameId
(),
game
->
getDescription
());
return
Response
::
RespOk
;
}
...
...
common/server_protocolhandler.cpp
View file @
761d549f
...
...
@@ -395,7 +395,9 @@ Response::ResponseCode Server_ProtocolHandler::cmdMessage(const Command_Message
SessionEvent
*
se
=
prepareSessionEvent
(
event
);
userInterface
->
sendProtocolItem
(
*
se
);
rc
.
enqueuePreResponseItem
(
ServerMessage
::
SESSION_EVENT
,
se
);
databaseInterface
->
logMessage
(
userInfo
->
id
(),
QString
::
fromStdString
(
userInfo
->
name
()),
QString
::
fromStdString
(
userInfo
->
address
()),
QString
::
fromStdString
(
cmd
.
message
()),
Server_DatabaseInterface
::
MessageTargetChat
,
userInterface
->
getUserInfo
()
->
id
(),
receiver
);
return
Response
::
RespOk
;
}
...
...
@@ -543,6 +545,9 @@ Response::ResponseCode Server_ProtocolHandler::cmdRoomSay(const Command_RoomSay
msg
.
replace
(
QChar
(
'\n'
),
QChar
(
' '
));
room
->
say
(
QString
::
fromStdString
(
userInfo
->
name
()),
msg
);
databaseInterface
->
logMessage
(
userInfo
->
id
(),
QString
::
fromStdString
(
userInfo
->
name
()),
QString
::
fromStdString
(
userInfo
->
address
()),
msg
,
Server_DatabaseInterface
::
MessageTargetRoom
,
room
->
getId
(),
room
->
getName
());
return
Response
::
RespOk
;
}
...
...
servatrice/servatrice.ini.example
View file @
761d549f
...
...
@@ -79,7 +79,7 @@ password=foobar
[rooms]
; A servtrice server can expose to the users different "rooms" to chat and create games. Rooms can be defined
; A serv
a
trice server can expose to the users different "rooms" to chat and create games. Rooms can be defined
; with two different methods:
; config: rooms are defined in this configuration (see the following example)
; sql: rooms are defined in the "rooms" table of the database
...
...
@@ -144,6 +144,24 @@ max_message_count_per_interval=10
max_games_per_user=5
[logging]
; Servatrice can log user messages to the database table cockatrice_log.
; These messages can come from different sources; each source can be enabled separately.
; Log user messages inside chat rooms
log_user_msg_room=false
; Log user messages inside games
log_user_msg_game=false
; Log user messages in private chats
log_user_msg_chat=false
; Log user messages coming from other servers in the network
log_user_msg_isl=false
; EXPERIMENTAL - NOT WORKING YET
; The following settings are relative to the server network functionality, that is not yet complete.
; Avoid enabling it unless you are willing to test it and help its development.
...
...
servatrice/servatrice.sql
View file @
761d549f
...
...
@@ -223,3 +223,18 @@ CREATE TABLE IF NOT EXISTS `cockatrice_rooms_gametypes` (
PRIMARY
KEY
(
`name`
)
)
ENGINE
=
MyISAM
DEFAULT
CHARSET
=
utf8
;
CREATE
TABLE
IF
NOT
EXISTS
`cockatrice_log`
(
`log_time`
datetime
NOT
NULL
,
`sender_id`
int
(
7
)
unsigned
NULL
,
`sender_name`
varchar
(
35
)
NOT
NULL
,
`sender_ip`
varchar
(
255
)
NOT
NULL
,
`log_message`
text
NOT
NULL
,
`target_type`
ENUM
(
'room'
,
'game'
,
'chat'
),
`target_id`
int
(
7
)
NULL
,
`target_name`
varchar
(
50
)
NOT
NULL
,
KEY
`sender_name`
(
`sender_name`
),
KEY
`sender_ip`
(
`sender_ip`
),
KEY
`target_type`
(
`target_type`
),
KEY
`target_id`
(
`target_id`
),
KEY
`target_name`
(
`target_name`
)
)
ENGINE
=
MyISAM
DEFAULT
CHARSET
=
utf8
;
servatrice/src/servatrice_database_interface.cpp
View file @
761d549f
...
...
@@ -538,3 +538,44 @@ DeckList *Servatrice_DatabaseInterface::getDeckFromDatabase(int deckId, int user
return
deck
;
}
void
Servatrice_DatabaseInterface
::
logMessage
(
const
int
senderId
,
const
QString
&
senderName
,
const
QString
&
senderIp
,
const
QString
&
logMessage
,
LogMessage_TargetType
targetType
,
const
int
targetId
,
const
QString
&
targetName
)
{
QSqlQuery
query
(
sqlDatabase
);
QString
targetTypeString
;
switch
(
targetType
)
{
case
MessageTargetRoom
:
if
(
!
settingsCache
->
value
(
"logging/log_user_msg_room"
,
0
).
toBool
())
return
;
targetTypeString
=
"room"
;
break
;
case
MessageTargetGame
:
if
(
!
settingsCache
->
value
(
"logging/log_user_msg_game"
,
0
).
toBool
())
return
;
targetTypeString
=
"game"
;
break
;
case
MessageTargetChat
:
if
(
!
settingsCache
->
value
(
"logging/log_user_msg_chat"
,
0
).
toBool
())
return
;
targetTypeString
=
"chat"
;
break
;
case
MessageTargetIslRoom
:
if
(
!
settingsCache
->
value
(
"logging/log_user_msg_isl"
,
0
).
toBool
())
return
;
targetTypeString
=
"room"
;
break
;
default:
return
;
}
query
.
prepare
(
"insert into "
+
server
->
getDbPrefix
()
+
"_log (log_time, sender_id, sender_name, sender_ip, log_message, target_type, target_id, target_name) values (now(), :sender_id, :sender_name, :sender_ip, :log_message, :target_type, :target_id, :target_name)"
);
query
.
bindValue
(
":sender_id"
,
senderId
<
1
?
QVariant
()
:
senderId
);
query
.
bindValue
(
":sender_name"
,
senderName
);
query
.
bindValue
(
":sender_ip"
,
senderIp
);
query
.
bindValue
(
":log_message"
,
logMessage
);
query
.
bindValue
(
":target_type"
,
targetTypeString
);
query
.
bindValue
(
":target_id"
,
(
targetType
==
MessageTargetChat
&&
targetId
<
1
)
?
QVariant
()
:
targetId
);
query
.
bindValue
(
":target_name"
,
targetName
);
execSqlQuery
(
query
);
}
servatrice/src/servatrice_database_interface.h
View file @
761d549f
...
...
@@ -52,6 +52,8 @@ public:
bool
userSessionExists
(
const
QString
&
userName
);
bool
getRequireRegistration
();
void
logMessage
(
const
int
senderId
,
const
QString
&
senderName
,
const
QString
&
senderIp
,
const
QString
&
logMessage
,
LogMessage_TargetType
targetType
,
const
int
targetId
,
const
QString
&
targetName
);
};
#endif
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment