mirror of
https://github.com/DarkflameUniverse/DarkflameServer.git
synced 2025-10-09 08:58:04 +00:00
it works, now to clean up more
This commit is contained in:
@@ -11,7 +11,7 @@ target_include_directories(ChatServer PRIVATE "${PROJECT_SOURCE_DIR}/dChatFilter
|
||||
add_compile_definitions(ChatServer PRIVATE PROJECT_VERSION="\"${PROJECT_VERSION}\"")
|
||||
|
||||
add_library(dChatServer ${DCHATSERVER_SOURCES})
|
||||
target_include_directories(dChatServer PRIVATE "${PROJECT_SOURCE_DIR}/dServer")
|
||||
target_include_directories(dChatServer PRIVATE "${PROJECT_SOURCE_DIR}/dServer" "${PROJECT_SOURCE_DIR}/dChatFilter")
|
||||
|
||||
target_link_libraries(dChatServer ${COMMON_LIBRARIES} dChatFilter)
|
||||
target_link_libraries(ChatServer ${COMMON_LIBRARIES} dChatFilter dChatServer dServer dWeb)
|
||||
|
@@ -436,21 +436,20 @@ void ChatPacketHandler::HandleChatMessage(Packet* packet) {
|
||||
data.sender = Game::playerContainer.GetPlayerData(sender);
|
||||
if (!data.sender || data.sender.GetIsMuted()) return;
|
||||
|
||||
eChatChannel channel;
|
||||
uint32_t size;
|
||||
|
||||
inStream.IgnoreBytes(4);
|
||||
inStream.Read(data.channel);
|
||||
inStream.Read(size);
|
||||
inStream.IgnoreBytes(77);
|
||||
LOG("message size: %u", size);
|
||||
|
||||
data.message = LUWString(size);
|
||||
inStream.Read(data.message);
|
||||
|
||||
LOG("Got message from (%s) via [%s]: %s", data.sender.playerName.c_str(), StringifiedEnum::ToString(data.channel).data(), data.message.GetAsString().c_str());
|
||||
|
||||
|
||||
switch (channel) {
|
||||
switch (data.channel) {
|
||||
case eChatChannel::LOCAL: {
|
||||
break;
|
||||
}
|
||||
@@ -467,7 +466,7 @@ void ChatPacketHandler::HandleChatMessage(Packet* packet) {
|
||||
break;
|
||||
}
|
||||
default:
|
||||
LOG("Unhandled Chat channel [%s]", StringifiedEnum::ToString(channel).data());
|
||||
LOG("Unhandled Chat channel [%s]", StringifiedEnum::ToString(data.channel).data());
|
||||
break;
|
||||
}
|
||||
ChatWeb::SendWSChatMessage(data);
|
||||
@@ -526,7 +525,7 @@ void ChatPacketHandler::HandlePrivateChatMessage(Packet* packet) {
|
||||
SendPrivateChatMessage(data.sender, data.receiver, data.sender, data.message, data.channel, eChatMessageResponseCode::SENT);
|
||||
// To the receiver:
|
||||
SendPrivateChatMessage(data.sender, data.receiver, data.receiver, data.message, data.channel, eChatMessageResponseCode::RECEIVEDNEWWHISPER);
|
||||
// To the WebSocket
|
||||
// To the websocket:
|
||||
ChatWeb::SendWSChatMessage(data);
|
||||
return;
|
||||
}
|
||||
|
@@ -2,8 +2,7 @@
|
||||
#include "dCommonVars.h"
|
||||
#include "dNetCommon.h"
|
||||
#include "BitStream.h"
|
||||
|
||||
struct PlayerData;
|
||||
#include "PlayerContainer.h"
|
||||
|
||||
enum class eAddFriendResponseType : uint8_t;
|
||||
|
||||
|
@@ -16,6 +16,8 @@
|
||||
#include "Database.h"
|
||||
#include "ChatJSONUtils.h"
|
||||
#include "JSONUtils.h"
|
||||
#include "eGameMasterLevel.h"
|
||||
#include "dChatFilter.h"
|
||||
|
||||
using json = nlohmann::json;
|
||||
|
||||
@@ -57,15 +59,53 @@ void HandleHTTPAnnounceRequest(HTTPReply& reply, std::string body) {
|
||||
}
|
||||
|
||||
void HandleWSChat(mg_connection* connection, json data) {
|
||||
auto check = JSONUtils::CheckRequiredData(data, { "user", "message" });
|
||||
auto check = JSONUtils::CheckRequiredData(data, { "user", "message", "gmlevel", "zone" });
|
||||
if (!check.empty()) {
|
||||
LOG_DEBUG("Received invalid websocket message: %s", check.c_str());
|
||||
} else {
|
||||
const auto user = data["user"].get<std::string>();
|
||||
const auto message = data["message"].get<std::string>();
|
||||
LOG_DEBUG("EXTERNAL Chat message from %s: %s", user.c_str(), message.c_str());
|
||||
// TODO: use chat filter and respond if the message isn't allowed
|
||||
// TODO: Send chat message to corret world server to broadcast to players
|
||||
const auto gmlevel = GeneralUtils::TryParse<eGameMasterLevel>(data["gmlevel"].get<std::string>()).value_or(eGameMasterLevel::CIVILIAN);
|
||||
const auto zone = data["zone"].get<uint32_t>();
|
||||
|
||||
const auto filter_check = Game::chatFilter->IsSentenceOkay(message, gmlevel);
|
||||
if (!filter_check.empty()) {
|
||||
LOG_DEBUG("Chat message \"%s\" from %s was not allowed", message.c_str(), user.c_str());
|
||||
data["error"] = "Chat message blocked by filter";
|
||||
data["filtered"] = json::array();
|
||||
for (const auto& filtered : filter_check) {
|
||||
data["filtered"].push_back(message.substr(filtered.first, filtered.second));
|
||||
}
|
||||
mg_ws_send(connection, data.dump().c_str(), data.dump().size(), WEBSOCKET_OP_TEXT);
|
||||
return;
|
||||
}
|
||||
LOG("%s: %s", user.c_str(), message.c_str());
|
||||
|
||||
// bodge to test
|
||||
CBITSTREAM;
|
||||
BitStreamUtils::WriteHeader(bitStream, eConnectionType::CHAT, MessageType::Chat::GENERAL_CHAT_MESSAGE);
|
||||
bitStream.Write(zone);
|
||||
BitStreamUtils::WriteHeader(bitStream, eConnectionType::CHAT, MessageType::Chat::GENERAL_CHAT_MESSAGE);
|
||||
|
||||
bitStream.Write<uint64_t>(0);
|
||||
bitStream.Write(eChatChannel::LOCAL);
|
||||
|
||||
bitStream.Write<uint32_t>(message.size());
|
||||
bitStream.Write(LUWString(user));
|
||||
|
||||
bitStream.Write<uint64_t>(0);
|
||||
bitStream.Write<uint16_t>(0);
|
||||
bitStream.Write<char>(0);
|
||||
|
||||
for (uint32_t i = 0; i < message.size(); ++i) {
|
||||
bitStream.Write<uint16_t>(message[i]);
|
||||
}
|
||||
bitStream.Write<uint16_t>(0);
|
||||
Game::server->Send(bitStream, UNASSIGNED_SYSTEM_ADDRESS, true);
|
||||
|
||||
// send to world servers with macthing zone
|
||||
// Cry: this is the hard part since there is no instance manager
|
||||
// Do we send it to master and let master sort it out via instance manager?
|
||||
}
|
||||
}
|
||||
|
||||
@@ -110,7 +150,7 @@ namespace ChatWeb {
|
||||
json data;
|
||||
data["player_data"] = player;
|
||||
data["update_type"] = magic_enum::enum_name(activityType);
|
||||
Game::web.SendWSMessage("player_update", data);
|
||||
Game::web.SendWSMessage("player", data);
|
||||
}
|
||||
|
||||
void SendWSChatMessage(const ChatMessage& chatMessage) {
|
||||
|
Reference in New Issue
Block a user