diff --git a/common/event/event_loop.h b/common/event/event_loop.h index e65b0fb08..268f78c4d 100644 --- a/common/event/event_loop.h +++ b/common/event/event_loop.h @@ -9,7 +9,7 @@ namespace EQ { public: static EventLoop &Get() { - static EventLoop inst; + static thread_local EventLoop inst; return inst; } diff --git a/common/net/daybreak_connection.cpp b/common/net/daybreak_connection.cpp index 76f547736..375841211 100644 --- a/common/net/daybreak_connection.cpp +++ b/common/net/daybreak_connection.cpp @@ -1,11 +1,10 @@ #include "daybreak_connection.h" #include "../event/event_loop.h" #include "../event/task.h" -#include "../eqemu_logsys.h" -#include "../eqemu_logsys_fmt.h" #include "../data_verification.h" #include "crc32.h" #include +#include #include EQ::Net::DaybreakConnectionManager::DaybreakConnectionManager() @@ -211,7 +210,9 @@ void EQ::Net::DaybreakConnectionManager::ProcessPacket(const std::string &endpoi } if (size < DaybreakHeader::size()) { - LogF(Logs::Detail, Logs::Netcode, "Packet of size {0} which is less than {1}", size, DaybreakHeader::size()); + if (m_on_error_message) { + m_on_error_message(fmt::format("Packet of size {0} which is less than {1}", size, DaybreakHeader::size())); + } return; } @@ -241,7 +242,9 @@ void EQ::Net::DaybreakConnectionManager::ProcessPacket(const std::string &endpoi } } catch (std::exception &ex) { - LogF(Logs::Detail, Logs::Netcode, "Error processing packet: {0}", ex.what()); + if (m_on_error_message) { + m_on_error_message(fmt::format("Error processing packet: {0}", ex.what())); + } } } @@ -396,7 +399,9 @@ void EQ::Net::DaybreakConnection::Process() ProcessQueue(); } catch (std::exception ex) { - LogF(Logs::Detail, Logs::Netcode, "Error processing connection: {0}", ex.what()); + if (m_owner->m_on_error_message) { + m_owner->m_on_error_message(fmt::format("Error processing connection: {0}", ex.what())); + } } } @@ -417,7 +422,9 @@ void EQ::Net::DaybreakConnection::ProcessPacket(Packet &p) if (PacketCanBeEncoded(p)) { if (!ValidateCRC(p)) { - LogF(Logs::Detail, Logs::Netcode, "Tossed packet that failed CRC of type {0:#x}", p.Length() >= 2 ? p.GetInt8(1) : 0); + if (m_owner->m_on_error_message) { + m_owner->m_on_error_message(fmt::format("Tossed packet that failed CRC of type {0:#x}", p.Length() >= 2 ? p.GetInt8(1) : 0)); + } return; } @@ -798,7 +805,9 @@ void EQ::Net::DaybreakConnection::ProcessDecodedPacket(const Packet &p) break; } default: - LogF(Logs::Detail, Logs::Netcode, "Unhandled opcode {0:#x}", p.GetInt8(1)); + if (m_owner->m_on_error_message) { + m_owner->m_on_error_message(fmt::format("Unhandled opcode {0:#x}", p.GetInt8(1))); + } break; } } diff --git a/common/net/daybreak_connection.h b/common/net/daybreak_connection.h index 56ed0a7d3..ab3c759c8 100644 --- a/common/net/daybreak_connection.h +++ b/common/net/daybreak_connection.h @@ -291,6 +291,7 @@ namespace EQ void OnNewConnection(std::function)> func) { m_on_new_connection = func; } void OnConnectionStateChange(std::function, DbProtocolStatus, DbProtocolStatus)> func) { m_on_connection_state_change = func; } void OnPacketRecv(std::function, const Packet &)> func) { m_on_packet_recv = func; } + void OnErrorMessage(std::function func) { m_on_error_message = func; } DaybreakConnectionManagerOptions& GetOptions() { return m_options; } private: @@ -305,6 +306,7 @@ namespace EQ std::function)> m_on_new_connection; std::function, DbProtocolStatus, DbProtocolStatus)> m_on_connection_state_change; std::function, const Packet&)> m_on_packet_recv; + std::function m_on_error_message; std::map, std::shared_ptr> m_connections; void ProcessPacket(const std::string &endpoint, int port, const char *data, size_t size);