diff --git a/Sources/Plasma/NucleusLib/CMakeLists.txt b/Sources/Plasma/NucleusLib/CMakeLists.txt
index 1e9f8ade..673d9ca3 100644
--- a/Sources/Plasma/NucleusLib/CMakeLists.txt
+++ b/Sources/Plasma/NucleusLib/CMakeLists.txt
@@ -23,7 +23,6 @@ add_subdirectory(pnNetBase)
add_subdirectory(pnNetCli)
add_subdirectory(pnNetCommon)
add_subdirectory(pnNetDiag)
-#add_subdirectory(pnNetLog) # Not being used in any current sln
add_subdirectory(pnNetProtocol)
#add_subdirectory(pnOraLib) # Not being used in any current sln
add_subdirectory(pnProduct)
diff --git a/Sources/Plasma/NucleusLib/pnNetLog/Intern.h b/Sources/Plasma/NucleusLib/pnNetLog/Intern.h
deleted file mode 100644
index b8502621..00000000
--- a/Sources/Plasma/NucleusLib/pnNetLog/Intern.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/*==LICENSE==*
-
-CyanWorlds.com Engine - MMOG client, server and tools
-Copyright (C) 2011 Cyan Worlds, Inc.
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see .
-
-Additional permissions under GNU GPL version 3 section 7
-
-If you modify this Program, or any covered work, by linking or
-combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
-NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
-JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
-(or a modified version of those libraries),
-containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
-PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
-JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
-licensors of this Program grant you additional
-permission to convey the resulting work. Corresponding Source for a
-non-source form of such a combination shall include the source code for
-the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
-work.
-
-You can contact Cyan Worlds, Inc. by email legal@cyan.com
- or by snail mail at:
- Cyan Worlds, Inc.
- 14617 N Newport Hwy
- Mead, WA 99021
-
-*==LICENSE==*/
-/*****************************************************************************
-*
-* $/Plasma20/Sources/Plasma/NucleusLib/pnNetLog/Intern.h
-*
-***/
-
-#ifdef PLASMA20_SOURCES_PLASMA_NUCLEUSLIB_PNNETLOG_INTERN_H
-#error "Header $/Plasma20/Sources/Plasma/NucleusLib/pnNetLog/Intern.h included more than once"
-#endif
-#define PLASMA20_SOURCES_PLASMA_NUCLEUSLIB_PNNETLOG_INTERN_H
-
-
-
-/*****************************************************************************
-*
-* pnNlApi.cpp
-*
-***/
-
-const NetLogEvent *NetLogFindEvent (unsigned type, ESrvType srvType);
-
-
-/*****************************************************************************
-*
-* pnNlCli.cpp
-*
-***/
-
-void NetLogCliInitialize (ESrvType srvType);
-void NetLogCliShutdown ();
-void NetLogCliDestroy ();
-void NetLogCliSendEvent (const NetLogEvent &event, va_list args);
-
-/*****************************************************************************
-*
-* pnNlSrv.cpp
-*
-***/
-
-void NetLogSrvInitialize ();
-void NetLogSrvShutdown ();
-void NetLogSrvDestroy ();
\ No newline at end of file
diff --git a/Sources/Plasma/NucleusLib/pnNetLog/Pch.h b/Sources/Plasma/NucleusLib/pnNetLog/Pch.h
deleted file mode 100644
index 64fa2742..00000000
--- a/Sources/Plasma/NucleusLib/pnNetLog/Pch.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/*==LICENSE==*
-
-CyanWorlds.com Engine - MMOG client, server and tools
-Copyright (C) 2011 Cyan Worlds, Inc.
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see .
-
-Additional permissions under GNU GPL version 3 section 7
-
-If you modify this Program, or any covered work, by linking or
-combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
-NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
-JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
-(or a modified version of those libraries),
-containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
-PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
-JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
-licensors of this Program grant you additional
-permission to convey the resulting work. Corresponding Source for a
-non-source form of such a combination shall include the source code for
-the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
-work.
-
-You can contact Cyan Worlds, Inc. by email legal@cyan.com
- or by snail mail at:
- Cyan Worlds, Inc.
- 14617 N Newport Hwy
- Mead, WA 99021
-
-*==LICENSE==*/
-/*****************************************************************************
-*
-* $/Plasma20/Sources/Plasma/NucleusLib/pnNetLog/Pch.h
-*
-***/
-
-#ifdef PLASMA20_SOURCES_PLASMA_NUCLEUSLIB_PNNETLOG_PCH_H
-#error "Header $/Plasma20/Sources/Plasma/NucleusLib/pnNetLog/Pch.h included more than once"
-#endif
-#define PLASMA20_SOURCES_PLASMA_NUCLEUSLIB_PNNETLOG_PCH_H
-
-
-// NucleusLib
-#include "pnUtils/pnUtils.h"
-#include "pnNetBase/pnNetBase.h"
-#include "pnAsyncCore/pnAsyncCore.h"
-#include "pnNetCli/pnNetCli.h"
-
-#ifdef SERVER
-#include "pnIni/pnIni.h"
-#include "../ServerLib/psUtils/psUtils.h"
-#endif
-
-#define USES_PROTOCOL_SRV2LOG
-#include "pnNetProtocol/pnNetProtocol.h"
-#include "pnProduct/pnProduct.h"
-
-// Local
-#include "pnNetLog.h"
-#include "Intern.h"
-
-// System
-#include // _alloca
diff --git a/Sources/Plasma/NucleusLib/pnNetLog/pnNetLog.h b/Sources/Plasma/NucleusLib/pnNetLog/pnNetLog.h
deleted file mode 100644
index 9ccd4a4d..00000000
--- a/Sources/Plasma/NucleusLib/pnNetLog/pnNetLog.h
+++ /dev/null
@@ -1,164 +0,0 @@
-/*==LICENSE==*
-
-CyanWorlds.com Engine - MMOG client, server and tools
-Copyright (C) 2011 Cyan Worlds, Inc.
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see .
-
-Additional permissions under GNU GPL version 3 section 7
-
-If you modify this Program, or any covered work, by linking or
-combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
-NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
-JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
-(or a modified version of those libraries),
-containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
-PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
-JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
-licensors of this Program grant you additional
-permission to convey the resulting work. Corresponding Source for a
-non-source form of such a combination shall include the source code for
-the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
-work.
-
-You can contact Cyan Worlds, Inc. by email legal@cyan.com
- or by snail mail at:
- Cyan Worlds, Inc.
- 14617 N Newport Hwy
- Mead, WA 99021
-
-*==LICENSE==*/
-/*****************************************************************************
-*
-* $/Plasma20/Sources/Plasma/NucleusLib/pnNetLog/pnNetLog.h
-*
-***/
-
-#ifdef PLASMA20_SOURCES_PLASMA_NUCLEUSLIB_PNNETLOG_PNNETLOG_H
-#error "Header $/Plasma20/Sources/Plasma/NucleusLib/pnNetLog/pnNetLog.h included more than once"
-#endif
-#define PLASMA20_SOURCES_PLASMA_NUCLEUSLIB_PNNETLOG_PNNETLOG_H
-
-#define MAX_NAME_LEN 64
-
-
-/*****************************************************************************
-*
-*
- Look at psLogEvents/psLeAuth for an example of how to create a new LogEvent
-*
-***/
-
-
-/*****************************************************************************
-*
-* Log Template Definitions
-*
-***/
-
-enum ELogParamType {
- kLogParamInt, // (int)
- kLogParamUnsigned, // (unsigned)
- kLogParamFloat, // (float)
- kLogParamUuid, // Uuid
- kLogParamStringW, // (const wchar_t *)
- kLogParamLong, // (long) or (uint32_t)
- kLogParamLongLong, // (long long) or (uint64_t)
- kNumLogParamTypes
-};
-
-struct NetLogField {
- ELogParamType type; // element type
- wchar_t name[MAX_PATH];
-};
-
-struct NetLogEvent {
- ESrvType srvType;
- unsigned logEventType;
- const wchar_t * eventName;
- const NetLogField * fields;
- unsigned numFields;
-};
-
-struct NetLogSrvField {
- const wchar_t *name;
- const wchar_t *data;
-};
-
-#define NET_LOG_FIELD_INT(name) { kLogParamInt, name }
-#define NET_LOG_FIELD_UNSIGNED(name) { kLogParamUnsigned, name }
-#define NET_LOG_FIELD_FLOAT(name) { kLogParamFloat, name }
-#define NET_LOG_FIELD_STRING(name) { kLogParamStringW, name }
-#define NET_LOG_FIELD_UUID(name) { kLogParamUuid, name }
-#define NET_LOG_FIELD_LONG(name) { kLogParamLong, name }
-#define NET_LOG_FIELD_LONGLONG(name) { kLogParamLongLong, name }
-
-#define NET_LOG_EVENT_AUTH(name) { kSrvTypeAuth, kLogEventId_##name, L#name, kLogEventFields_##name, arrsize( kLogEventFields_##name )}
-#define NET_LOG_EVENT_GAME(name) { kSrvTypeGame, kLogEventId_##name, L#name, kLogEventFields_##name, arrsize( kLogEventFields_##name )}
-#define NET_LOG_EVENT_MCP(name) { kSrvTypeMcp, kLogEventId_##name, L#name, kLogEventFields_##name, arrsize( kLogEventFields_##name )}
-#define NET_LOG_EVENT_DB(name) { kSrvTypeDb, kLogEventId_##name, L#name, kLogEventFields_##name, arrsize( kLogEventFields_##name )}
-
-
-/*****************************************************************************
-*
-* pnNlApi.cpp
-*
-***/
-
-void NetLogInitialize (ESrvType srvType);
-void NetLogShutdown ();
-void NetLogDestroy ();
-void NetLogRegisterEvents (const NetLogEvent events[], unsigned count);
-
-// Should only be called by psLogEvents - look there for logging functions
-void NetLogSendEvent (
- unsigned type,
- ...
-);
-
-
-/*****************************************************************************
-*
-* pnNlConn.cpp
-*
-***/
-
-enum {
- kNlCliNumConn,
- kNlCliNumTrans,
- kNlCliNumPendingSaves,
- kNlCliNumPerf,
-};
-
-long NlCliGetPerf (unsigned index);
-
-
-/*****************************************************************************
-*
-* pnNlSrv.cpp
-*
-***/
-
-struct LogConn;
-enum {
- kNlSrvPerfConnCount,
- kNlSrvPerfConnDenied,
- kNlSrvNumPerf
-};
-
-typedef void (*NlSrvCallback)(const NetLogEvent *event, const ARRAY(wchar_t) &, unsigned, NetAddressNode &, uint64_t, unsigned, unsigned);
-long NetLogSrvGetPerf (unsigned index);
-void NetLogSrvRegisterCallback(NlSrvCallback callback);
-void LogConnIncRef (LogConn * conn);
-void LogConnDecRef (LogConn * conn);
diff --git a/Sources/Plasma/NucleusLib/pnNetLog/pnNlApi.cpp b/Sources/Plasma/NucleusLib/pnNetLog/pnNlApi.cpp
deleted file mode 100644
index aecc1868..00000000
--- a/Sources/Plasma/NucleusLib/pnNetLog/pnNlApi.cpp
+++ /dev/null
@@ -1,231 +0,0 @@
-/*==LICENSE==*
-
-CyanWorlds.com Engine - MMOG client, server and tools
-Copyright (C) 2011 Cyan Worlds, Inc.
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see .
-
-Additional permissions under GNU GPL version 3 section 7
-
-If you modify this Program, or any covered work, by linking or
-combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
-NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
-JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
-(or a modified version of those libraries),
-containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
-PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
-JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
-licensors of this Program grant you additional
-permission to convey the resulting work. Corresponding Source for a
-non-source form of such a combination shall include the source code for
-the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
-work.
-
-You can contact Cyan Worlds, Inc. by email legal@cyan.com
- or by snail mail at:
- Cyan Worlds, Inc.
- 14617 N Newport Hwy
- Mead, WA 99021
-
-*==LICENSE==*/
-/*****************************************************************************
-*
-* $/Plasma20/Sources/Plasma/NucleusLib/pnNetLog/pnNlApi.cpp
-*
-***/
-
-#include "Pch.h"
-#pragma hdrstop
-
-
-/*****************************************************************************
-*
-* Private Data
-*
-***/
-
-struct EventHash {
- unsigned eventType;
- ESrvType srvType;
-
- inline EventHash (
- unsigned eventType,
- ESrvType srvType
- );
-
- inline uint32_t GetHash () const;
- inline bool operator== (const EventHash & rhs) const;
-};
-
-struct NetLogEventHash : EventHash {
- const NetLogEvent * event;
-
- NetLogEventHash(
- unsigned eventType,
- ESrvType srvType,
- const NetLogEvent *event
- );
- HASHLINK(NetLogEventHash) link;
-};
-
-static CCritSect s_critsect;
-static ESrvType s_srvType;
-static HASHTABLEDECL(NetLogEventHash, EventHash, link) s_registeredEvents;
-
-
-/*****************************************************************************
-*
-* NetLogEventHash
-*
-***/
-
-//============================================================================
-NetLogEventHash::NetLogEventHash (
- unsigned eventType,
- ESrvType srvType,
- const NetLogEvent *event
-) : EventHash(eventType, srvType),
- event(event)
-{
-}
-
-
-/*****************************************************************************
-*
-* Event Hash
-*
-***/
-
-//============================================================================
-inline EventHash::EventHash (
- unsigned eventType,
- ESrvType srvType
-) : eventType(eventType)
-, srvType(srvType)
-{
-}
-
-//============================================================================
-inline uint32_t EventHash::GetHash () const {
- CHashValue hash(this, sizeof(*this));
- return hash.GetHash();
-}
-
-//============================================================================
-inline bool EventHash::operator== (const EventHash & rhs) const {
- return
- eventType == rhs.eventType &&
- srvType == rhs.srvType;
-}
-/*****************************************************************************
-*
-* Private Functions
-*
-***/
-
-//============================================================================
-static void NetLogUnRegisterEvents () {
- HASHTABLEDECL(NetLogEventHash, EventHash, link) tempHashTable;
- s_critsect.Enter();
- {
- while(NetLogEventHash *hash = s_registeredEvents.Head()) {
- tempHashTable.Add(hash);
- }
- }
- s_critsect.Leave();
-
- while(NetLogEventHash *hash = tempHashTable.Head()) {
- delete hash;
- }
-}
-
-
-/*****************************************************************************
-*
-* Public Functions
-*
-***/
-
-//============================================================================
-void NetLogInitialize (ESrvType srvType) {
- s_srvType = srvType;
- if(s_srvType == kSrvTypeLog)
- NetLogSrvInitialize();
- else
- NetLogCliInitialize(srvType);
-}
-
-//============================================================================
-void NetLogShutdown () {
- if(s_srvType == kSrvTypeLog)
- NetLogSrvShutdown();
- else
- NetLogCliShutdown();
- NetLogUnRegisterEvents();
-}
-
-//============================================================================
-void NetLogDestroy () {
- if(s_srvType == kSrvTypeLog)
- NetLogSrvDestroy();
- else
- NetLogCliDestroy();
-}
-
-//============================================================================
-void NetLogRegisterEvents (const NetLogEvent events[], unsigned count) {
- NetLogEventHash *hash;
- HASHTABLEDECL(NetLogEventHash, EventHash, link) tempHashTable;
-
- for(unsigned i = 0; i < count; ++i) {
- hash = new NetLogEventHash(events[i].logEventType, events[i].srvType, &events[i]);
- tempHashTable.Add(hash);
- }
- s_critsect.Enter();
- {
- while(NetLogEventHash *hash = tempHashTable.Head()) {
- s_registeredEvents.Add(hash);
- }
- }
- s_critsect.Leave();
-}
-
-//============================================================================
-const NetLogEvent *NetLogFindEvent (unsigned type, ESrvType srvType) {
- NetLogEventHash *hash;
- s_critsect.Enter();
- {
- hash = s_registeredEvents.Find(EventHash(type, srvType));
- }
- s_critsect.Leave();
- return hash ? hash->event : nil;
-}
-
-//============================================================================
-void NetLogSendEvent (
- unsigned type
- ...
-) {
- const NetLogEvent *event = NetLogFindEvent(type, s_srvType);
-
- if(event) {
- va_list args;
- va_start(args, type);
- NetLogCliSendEvent(*event, args);
- va_end(args);
- }
- else {
- LogMsg( kLogError, "unable to log event, event not found SrvType: %d EventType: %d.", s_srvType, type);
- }
-}
diff --git a/Sources/Plasma/NucleusLib/pnNetLog/pnNlCli.cpp b/Sources/Plasma/NucleusLib/pnNetLog/pnNlCli.cpp
deleted file mode 100644
index f158a4e8..00000000
--- a/Sources/Plasma/NucleusLib/pnNetLog/pnNlCli.cpp
+++ /dev/null
@@ -1,558 +0,0 @@
-/*==LICENSE==*
-
-CyanWorlds.com Engine - MMOG client, server and tools
-Copyright (C) 2011 Cyan Worlds, Inc.
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see .
-
-Additional permissions under GNU GPL version 3 section 7
-
-If you modify this Program, or any covered work, by linking or
-combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
-NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
-JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
-(or a modified version of those libraries),
-containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
-PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
-JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
-licensors of this Program grant you additional
-permission to convey the resulting work. Corresponding Source for a
-non-source form of such a combination shall include the source code for
-the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
-work.
-
-You can contact Cyan Worlds, Inc. by email legal@cyan.com
- or by snail mail at:
- Cyan Worlds, Inc.
- 14617 N Newport Hwy
- Mead, WA 99021
-
-*==LICENSE==*/
-/*****************************************************************************
-*
-* $/Plasma20/Sources/Plasma/NucleusLib/pnNetLog/pnNlCli.cpp
-*
-***/
-
-#include "Pch.h"
-#pragma hdrstop
-
-
-/*****************************************************************************
-*
-* Private
-*
-***/
-
-struct NetLogConn : SrvConn {
- NetAddress netaddr;
- ESrvType srvType;
-
- NetLogConn (const NetAddress & addr, ESrvType srvType);
- ~NetLogConn ();
-
- void Connect (
- AsyncCancelId * cancelId,
- FAsyncNotifySocketProc notifyProc,
- void * param
- );
-};
-
-struct LogMsgTrans : SrvTrans {
- Srv2Log_LogMsg *msgBuffer;
-
- LogMsgTrans();
- ~LogMsgTrans();
- bool OnTransReply (
- ENetError * error,
- SrvMsgHeader * msg
- );
-};
-
-struct LogConnEventNode {
- LINK(LogConnEventNode) link;
- Srv2Log_LogMsg * msg;
- unsigned sendTimeMs;
-
- LogConnEventNode(Srv2Log_LogMsg *msg, unsigned timeStampMs);
-};
-
-
-/*****************************************************************************
-*
-* Private Data
-*
-***/
-
-static NetLogConn * s_conn;
-static CCritSect s_critsect;
-static IniChangeReg * s_change;
-static ESrvType s_srvType;
-static LISTDECL(LogConnEventNode, link) s_eventQueue;
-static AsyncTimer * s_timer;
-static long s_perf[kNlCliNumPerf];
-static bool s_running;
-
-static const unsigned kIssueSaveMs = 100;
-static const unsigned kMaxNumberOfTransactions = 2000;
-
-
-/*****************************************************************************
-*
-* Private Functions
-*
-***/
-
-//============================================================================
-static NetLogConn * GetConnIncRef () {
- NetLogConn * conn;
- s_critsect.Enter();
- {
- if (nil != (conn = s_conn))
- conn->IncRef();
- }
- s_critsect.Leave();
- return conn;
-}
-
-//============================================================================
-static void NetLogConnConnect (NetAddress & addr, ESrvType srvType) {
- NetLogConn *conn = SRV_CONN_ALLOC(NetLogConn)(addr, srvType);
-
- s_critsect.Enter();
- {
- SWAP(s_conn, conn);
- }
- s_critsect.Leave();
-
- if (conn)
- conn->Destroy();
-}
-
-//============================================================================
-static void NetLogConnDisconnect () {
- NetLogConn *conn = nil;
-
- s_critsect.Enter();
- {
- SWAP(s_conn, conn);
- }
- s_critsect.Leave();
-
- if (conn)
- conn->Destroy();
-}
-
-//============================================================================
-static void AddEventNode (Srv2Log_LogMsg *msg) {
- LogConnEventNode *node = new LogConnEventNode(msg, TimeGetMs() + kIssueSaveMs);
- s_critsect.Enter();
- {
- s_eventQueue.Link(node);
- }
- s_critsect.Leave();
-
- AsyncTimerUpdate(
- s_timer,
- kIssueSaveMs,
- kAsyncTimerUpdateSetPriorityHigher
- );
-}
-
-//============================================================================
-static void ParseIni (Ini * ini) {
- unsigned iter;
- const IniValue * value = IniGetFirstValue(
- ini,
- L"Server Locations",
- L"LogSrv",
- &iter
- );
-
- if (value) {
- wchar_t addrStr[32];
- IniGetString(value, addrStr, arrsize(addrStr), 0, nil);
- NetAddress addr;
- NetAddressFromString(&addr, addrStr, kNetDefaultServerPort);
- NetLogConnConnect(addr, s_srvType);
- }
-}
-
-//============================================================================
-static void IniChangeCallback (const wchar_t fullPath[]) {
- Ini * ini = IniOpen(fullPath);
- ParseIni(ini);
- IniClose(ini);
-}
-
-//============================================================================
-static unsigned TimerCallback (void *) {
- LISTDECL(LogConnEventNode, link) sendList;
- unsigned sleepMs = kAsyncTimeInfinite;
-
- s_critsect.Enter();
- {
- int allowedNumTrans = kMaxNumberOfTransactions - s_perf[kNlCliNumPendingSaves]; // find the number of transactions that we can send based on the number in transit, and the max number allowed
- if(allowedNumTrans < 0) // this could be negative, if so set to zero
- allowedNumTrans = 0;
-
- uint32_t currTime = TimeGetMs();
- LogConnEventNode *hash;
- int timeDiff;
-
- // Add pending saves, up to the max allowed per update
- for(;;) {
- if(!allowedNumTrans && s_running) {
- sleepMs = 5000; // we are at our max number of transactions sleep for 5 seconds and try again
- break;
- }
-
- hash = s_eventQueue.Head();
- if(!hash)
- break; // no messages left. We will wait until another message comes in before another timer update
-
- timeDiff = hash->sendTimeMs - currTime;
-
- // nodes are naturally ordered by increasing sendTimeMs
- if(!s_running || (timeDiff <= 0)) {
- sendList.Link(hash);
- --allowedNumTrans;
- }
- else {
- sleepMs = timeDiff;
- break;
- }
- }
- }
- s_critsect.Leave();
-
- while(LogConnEventNode *node = sendList.Head()) {
- LogMsgTrans * trans = SRV_TRANS_ALLOC(LogMsgTrans);
- trans->msgBuffer = node->msg;
-
- if (NetLogConn * conn = GetConnIncRef()) {
- conn->SendRequest(trans, node->msg);
- conn->DecRef();
- }
- else {
- trans->TransCancel(kNetErrTimeout);
- }
- delete node;
- }
- return sleepMs;
-}
-
-//============================================================================
-static unsigned CalcArgsLength (const NetLogEvent &event, va_list args) {
- unsigned length = 0;
- unsigned paramType = kNumLogParamTypes; // invalidate
- unsigned field = 0;
-
- for(unsigned i = 0; i < event.numFields * 2; ++i) {
- if(!(i % 2)) {
- paramType = va_arg(args, unsigned);
- continue;
- }
-
- //validate parameter type
- if(paramType != (unsigned)event.fields[field].type) {
- length = 0;
- LogMsg( kLogError, "Log parameter types do not match for event: %s parameter: %s?", event.eventName, event.fields[field].name);
- break;
- }
-
- switch(event.fields[field].type) {
- case kLogParamInt: {
- va_arg(args, int);
- length += sizeof(int);
- }
- break;
-
- case kLogParamUnsigned: {
- va_arg(args, unsigned);
- length += sizeof(unsigned);
- }
- break;
-
- case kLogParamFloat: {
- va_arg(args, float);
- length += sizeof(float);
- }
- break;
-
- case kLogParamLong: {
- va_arg(args, long);
- length += sizeof(long);
- }
- break;
-
- case kLogParamLongLong: {
- va_arg(args, long long);
- length += sizeof(long long);
- }
- break;
-
- case kLogParamUuid: {
- va_arg(args, Uuid);
- length += sizeof(Uuid);
- }
- break;
-
- case kLogParamStringW: {
- wchar_t *str = va_arg(args, wchar_t *);
- if(!str)
- str = L"";
- length += StrBytes(str);
-
- }
- break;
-
- default:
- hsAssert(false, "Unknown argument type in log statement");
- return 0;
- }
- ++field;
- }
- return length;
-}
-
-
-/*****************************************************************************
-*
-* NetLogConn
-*
-***/
-
-//============================================================================
-NetLogConn::NetLogConn (const NetAddress & addr, ESrvType srvType)
-: netaddr(addr),
- srvType(srvType)
-{
- AtomicAdd(&s_perf[kNlCliNumConn], 1);
- SetAutoPing();
- AutoReconnect();
-}
-
-//============================================================================
-NetLogConn::~NetLogConn () {
- AtomicAdd(&s_perf[kNlCliNumConn], -1);
-}
-
-//============================================================================
-void NetLogConn::Connect (
- AsyncCancelId * cancelId,
- FAsyncNotifySocketProc notifyProc,
- void * param
-) {
- // Connect to remote server
- Srv2Log_Connect connect;
- connect.hdr.connType = kConnTypeSrvToLog;
- connect.hdr.hdrBytes = sizeof(connect.hdr);
- connect.hdr.buildId = BuildId();
- connect.hdr.buildType = BUILD_TYPE_LIVE;
- connect.hdr.branchId = BranchId();
- connect.hdr.productId = ProductId();
- connect.data.dataBytes = sizeof(connect.data);
- connect.data.buildId = BuildId();
- connect.data.srvType = srvType;
- connect.data.buildType = BUILD_TYPE_LIVE;
- connect.data.productId = ProductId();
-
- AsyncSocketConnect(
- cancelId,
- netaddr,
- notifyProc,
- param,
- &connect,
- sizeof(connect)
- );
-}
-
-
-/*****************************************************************************
-*
-* LogMsgTrans
-*
-***/
-
-//============================================================================
-LogMsgTrans::LogMsgTrans ()
-: msgBuffer(nil)
-{
- AtomicAdd(&s_perf[kNlCliNumTrans], 1);
-}
-
-//============================================================================
-LogMsgTrans::~LogMsgTrans () {
- AtomicAdd(&s_perf[kNlCliNumTrans], -1);
-}
-
-//============================================================================
-bool LogMsgTrans::OnTransReply (
- ENetError * error,
- SrvMsgHeader * msg
-) {
- ref(msg);
- bool result;
- if (msg->protocolId != kNetProtocolSrv2Log) {
- result = SrvTrans::OnTransReply(error, msg);
- }
- else {
- result = true;
- }
-
- if(IS_NET_ERROR(*error) && s_running) {
- AddEventNode(msgBuffer);
- }
- else {
- free(msgBuffer);
- }
- return true;
-}
-
-
-/*****************************************************************************
-*
-* LogConnEventNode
-*
-***/
-
-//============================================================================
-LogConnEventNode::LogConnEventNode (Srv2Log_LogMsg *msg, unsigned sendTimeMs)
-: msg(msg),
- sendTimeMs(sendTimeMs)
-{
-}
-
-
-/*****************************************************************************
-*
-* Protected
-*
-***/
-
-//============================================================================
-void NetLogCliInitialize (ESrvType srvType) {
- s_running = true;
- s_srvType = srvType;
- AsyncTimerCreate(
- &s_timer,
- TimerCallback,
- kAsyncTimeInfinite,
- nil
- );
- IniChangeAdd(L"plServer", IniChangeCallback, &s_change);
-}
-
-//============================================================================
-void NetLogCliShutdown () {
- s_running = false;
- if(s_change) {
- IniChangeRemove(s_change, true);
- s_change = false;
- }
- if(s_timer) {
- AsyncTimerDeleteCallback(s_timer, TimerCallback);
- s_timer = nil;
- }
- NetLogConnDisconnect();
-}
-
-//============================================================================
-void NetLogCliDestroy () {
- while(s_perf[kNlCliNumTrans])
- AsyncSleep(10);
- while(s_perf[kNlCliNumConn])
- AsyncSleep(10);
-}
-
-//============================================================================
-void NetLogCliSendEvent (const NetLogEvent &event, va_list args) {
- Srv2Log_LogMsg *msg;
- unsigned length = CalcArgsLength(event, args);
- if(!length)
- return;
-
- CSrvPackBuffer pack(
- sizeof(*msg) +
- length
- );
-
- msg = (Srv2Log_LogMsg *) pack.Alloc(sizeof(*msg));
- msg->transId = 0;
- msg->protocolId = kNetProtocolSrv2Log;
- msg->messageId = kSrv2Log_LogMsg;
- msg->eventType = event.logEventType;
- msg->timestamp = TimeGetLocalTime();
-
- unsigned field = 0;
- unsigned paramType = kNumLogParamTypes;
-
- // if we get here the template parameters have already been validated by CalcLength, no need to do that again.
- for(unsigned i = 0; i < event.numFields * 2; ++i) {
- if(!(i % 2)) {
- paramType = va_arg(args, unsigned);
- continue;
- }
- switch(event.fields[field].type) {
- case kLogParamInt: {
- int i = va_arg(args, int);
- pack.AddData(&i, sizeof(int));
- }
- break;
-
- case kLogParamUnsigned: {
- unsigned u = va_arg(args, unsigned);
- pack.AddData(&u, sizeof(unsigned));
- }
- break;
-
- case kLogParamFloat: {
- float f = va_arg(args, float);
- pack.AddData(&f, sizeof(float));
- }
- break;
-
- case kLogParamLong: {
- long l = va_arg(args, long);
- pack.AddData(&l, sizeof(long));
- }
- break;
-
- case kLogParamLongLong: {
- long long ll = va_arg(args, long long);
- pack.AddData(&ll, sizeof(long long));
- }
- break;
-
- case kLogParamUuid: {
- Uuid uuid = va_arg(args, Uuid);
- pack.AddData(&uuid, sizeof(Uuid));
- }
- break;
-
- case kLogParamStringW: {
- wchar_t *str = va_arg(args, wchar_t *);
- if(!str)
- str = L"";
- pack.AddString(str);
- }
- break;
- }
- ++field;
- }
-
- msg->messageBytes = pack.Size();
- AddEventNode(msg);
-}
diff --git a/Sources/Plasma/NucleusLib/pnNetLog/pnNlSrv.cpp b/Sources/Plasma/NucleusLib/pnNetLog/pnNlSrv.cpp
deleted file mode 100644
index 903af940..00000000
--- a/Sources/Plasma/NucleusLib/pnNetLog/pnNlSrv.cpp
+++ /dev/null
@@ -1,603 +0,0 @@
-/*==LICENSE==*
-
-CyanWorlds.com Engine - MMOG client, server and tools
-Copyright (C) 2011 Cyan Worlds, Inc.
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see .
-
-Additional permissions under GNU GPL version 3 section 7
-
-If you modify this Program, or any covered work, by linking or
-combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
-NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
-JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
-(or a modified version of those libraries),
-containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
-PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
-JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
-licensors of this Program grant you additional
-permission to convey the resulting work. Corresponding Source for a
-non-source form of such a combination shall include the source code for
-the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
-work.
-
-You can contact Cyan Worlds, Inc. by email legal@cyan.com
- or by snail mail at:
- Cyan Worlds, Inc.
- 14617 N Newport Hwy
- Mead, WA 99021
-
-*==LICENSE==*/
-/*****************************************************************************
-*
-* $/Plasma20/Sources/Plasma/NucleusLib/pnNetLog/pnNlSrv.cpp
-*
-***/
-
-#include "Pch.h"
-#pragma hdrstop
-
-
-/*****************************************************************************
-*
-* Private
-*
-***/
-
-struct EventHash {
- unsigned eventType;
- ESrvType srvType;
-
- inline EventHash (
- unsigned eventType,
- ESrvType srvType
- );
-
- inline uint32_t GetHash () const;
- inline bool operator== (const EventHash & rhs) const;
-};
-
-struct NetLogEventHash : EventHash {
- const NetLogEvent * event;
-
- NetLogEventHash(
- unsigned eventType,
- ESrvType srvType,
- const NetLogEvent *event
- );
- HASHLINK(NetLogEventHash) link;
-};
-
-struct LogConn : SrvConn {
- LINK(LogConn) link;
- ESrvType srvType;
- unsigned buildId;
- NetAddressNode addr;
- unsigned buildType;
- unsigned productId;
-
- // Ctor
- LogConn (
- AsyncSocket sock,
- void ** userState,
- NetAddressNode nodeNumber,
- unsigned buildId,
- ESrvType srvType,
- unsigned buildType,
- unsigned productId
- );
- ~LogConn ();
-
- bool OnSrvMsg (SrvMsgHeader * msg);
- void OnDisconnect ();
-
- bool Recv_Srv2Log_LogMsg( const Srv2Log_LogMsg & msg );
-};
-
-
-/*****************************************************************************
-*
-* Private Data
-*
-***/
-
-static IniChangeReg * s_change;
-static long s_perf[kNlSrvNumPerf];
-static CCritSect s_critsect;
-static bool s_running;
-static LISTDECL(LogConn, link) s_conns;
-void (*NetLogSrvCallback)(const NetLogEvent *event, const ARRAY(wchar_t) &, unsigned, NetAddressNode &, uint64_t, unsigned, unsigned ) ;
-
-
-/*****************************************************************************
-*
-* Private Functions
-*
-***/
-
-//============================================================================
-static void ParseIni (Ini * ini) {
- unsigned iter;
- const IniValue *value;
-
- value = IniGetFirstValue(
- ini,
- L"",
- L"",
- &iter
- );
-}
-
-//============================================================================
-static void IniChangeCallback (const wchar_t fullPath[]) {
- Ini * ini = IniOpen(fullPath);
- ParseIni(ini);
- IniClose(ini);
-}
-
-//===========================================================================
-static bool SocketNotifyProc (
- AsyncSocket sock,
- EAsyncNotifySocket code,
- AsyncNotifySocket * notify,
- void ** userState
-) {
- // If the socket is successfully connected then only
- // kNotifySocketListenSuccess will arrive here, as
- // the service routine will be changed by SrvConn.
- if (code != kNotifySocketListenSuccess) {
- if (code == kNotifySocketDisconnect)
- AsyncSocketDelete(sock);
- return false;
- }
-
- // TODO: Verify this is from a valid server
- AsyncNotifySocketListen * listen = (AsyncNotifySocketListen *) notify;
- EServerRights rights = SrvIniGetServerRights(listen->remoteAddr);
- if (rights < kSrvRightsServer) {
- LogMsgDebug("LogConn: insufficient server rights");
- AtomicAdd(&s_perf[kNlSrvPerfConnDenied], 1);
- return false;
- }
-
- NetAddressNode nodeNumber = NetAddressGetNode(listen->remoteAddr);
-
- // Parse the connect message
- Srv2Log_ConnData connect;
- if (!Srv2LogValidateConnect(listen, &connect)) {
- LogMsgDebug("LogConn: invalid connect packet");
- AtomicAdd(&s_perf[kNlSrvPerfConnDenied], 1);
- return false;
- }
-
- // Create connection record
- LogConn * conn = SRV_CONN_ALLOC(LogConn)(
- sock,
- userState,
- nodeNumber,
- connect.buildId,
- (ESrvType) connect.srvType,
- connect.buildType,
- connect.productId
- );
-
- // Add this connection
- bool result;
- s_critsect.Enter();
- {
- s_conns.Link(conn);
- result = s_running;
- }
- s_critsect.Leave();
-
- return result;
-}
-
-
-/*****************************************************************************
-*
-* LogConn implementation
-*
-***/
-
-//============================================================================
-LogConn::LogConn (
- AsyncSocket sock,
- void ** userState,
- NetAddressNode nodeNumber,
- unsigned buildId,
- ESrvType srvType,
- unsigned buildType,
- unsigned productId
-) : srvType(srvType),
- buildId(buildId),
- buildType(buildType),
- productId(productId)
-{
- ref(nodeNumber);
- AtomicAdd(&s_perf[kNlSrvPerfConnCount], 1);
- SetAutoTimeout();
- NotifyListen(sock, userState);
- addr = nodeNumber;
-}
-
-//============================================================================
-LogConn::~LogConn () {
- AtomicAdd(&s_perf[kNlSrvPerfConnCount], -1);
-}
-
-//============================================================================
-void LogConn::OnDisconnect () {
- // Accepting side just destroys the connection. Connecting side
- // will reconnect if that's what should happen.
- Destroy();
-}
-
-//============================================================================
-bool LogConn::OnSrvMsg (SrvMsgHeader * msg) {
- // Pass along messages not intended for us
- if (msg->protocolId != kNetProtocolSrv2Log)
- return SrvConn::OnSrvMsg(msg);
-
- bool status = false;
- #define DISPATCH(a) case k##a: status = Recv_##a(*(const a*)msg); break
- switch (msg->messageId) {
- DISPATCH(Srv2Log_LogMsg);
-
- default:
- status = false;
- break;
- }
- #undef DISPATCH
-
- return status;
-}
-
-//============================================================================
-bool LogConn::Recv_Srv2Log_LogMsg(const Srv2Log_LogMsg & msg ) {
- CSrvUnpackBuffer unpack(&msg, msg.messageBytes);
- (void)unpack.GetData(sizeof(msg));
- unsigned length = 0;
- ARRAY(wchar_t) databuf;
- wchar_t data[256];
- const void *pData = 0;
-
- SendReply(msg.transId, kNetSuccess);
- if(!s_running)
- return true;
-
- // WARNING: each parameter type needs to be able to handle the case where GetData returns a nil pointer for backward compatability
-
- const NetLogEvent *event = NetLogFindEvent(msg.eventType, srvType);
- if(event) {
- for(unsigned i = 0; i < event->numFields; ++i) {
- if(!event->fields[i].name)
- {
- LogMsg(kLogError, "Failed logging event because of nil param name: %s", event->eventName);
- return true;
- }
-
- switch(event->fields[i].type) {
- case kLogParamInt: {
- int i = 0;
- pData = unpack.GetData(sizeof(int));
- if(!pData)
- continue;
-
- i = *(int *)pData;
- StrPrintf(data, arrsize(data), L"%d", i);
- length += StrLen(data) + 1;
- }
- break;
-
- case kLogParamUnsigned: {
- unsigned u = 0;
- pData = unpack.GetData(sizeof(unsigned));
- if(!pData)
- continue;
-
- u = *(unsigned *)pData;
- StrPrintf(data, arrsize(data), L"%d", u);
- length += StrLen(data) + 1;
- }
- break;
-
- case kLogParamFloat: {
- float f = 0;
- pData = unpack.GetData(sizeof(float));
- if(!pData)
- continue;
-
- f = *(float *)pData;
- StrPrintf(data, arrsize(data), L"%f", f);
- length += StrLen(data) + 1;
- }
- break;
-
- case kLogParamLong: {
- long l = 0;
- pData = unpack.GetData(sizeof(long));
- if(!pData)
- continue;
-
- l = *(long *)pData;
- StrPrintf(data, arrsize(data), L"%ld", l);
- length += StrLen(data) + 1;
- }
- break;
-
- case kLogParamLongLong: {
- long long ll = 0;
- pData = unpack.GetData(sizeof(long));
- if(!pData)
- continue;
- ll = *(long *)pData;
- StrPrintf(data, arrsize(data), L"%lld", ll);
- length += StrLen(data) + 1;
- }
- break;
-
- case kLogParamUuid: {
- Uuid uuid = 0;
- pData = unpack.GetData(sizeof(Uuid));
- if(!pData)
- continue;
- uuid = *(Uuid *)pData;
- StrPrintf(data, arrsize(data), L"%s", uuid.data);
- length += StrLen(data) + 1;
- }
- break;
-
- case kLogParamStringW: {
- const wchar_t *str = unpack.GetString();
- if(!str) {
- continue;
- }
- length += StrLen(str) + 1;
- }
- break;
- }
- length += StrLen(event->fields[i].name) + 1; // this must happen after the parameter check so we can opt out of saving a non existant parameter
- }
-
- databuf.Reserve(length + 1);
-
- {
- CSrvUnpackBuffer unpack(&msg, msg.messageBytes);
- (void)unpack.GetData(sizeof(msg));
- for(unsigned i = 0; i < event->numFields; ++i){
-
- // the parameter name needs to be written before the data. Also, we need to be able to opt out of writing a parameter.
- switch(event->fields[i].type) {
- case kLogParamInt: {
- pData = unpack.GetData(sizeof(int));
- if(!pData)
- continue;
-
- int val = *(int *)pData;
-
- // log event name
- databuf.Add(event->fields[i].name, StrLen(event->fields[i].name));
- databuf.Add(0);
-
- // log event data
- StrPrintf(data, arrsize(data), L"%d", val);
- databuf.Add(data, StrLen(data));
- databuf.Add(0);
- }
- break;
-
- case kLogParamUnsigned: {
- pData = unpack.GetData(sizeof(unsigned));
- if(!pData)
- continue;
-
- unsigned u = *(unsigned *)pData;
-
- // log event name
- databuf.Add(event->fields[i].name, StrLen(event->fields[i].name));
- databuf.Add(0);
-
- // log event data
- StrPrintf(data, arrsize(data), L"%d", u);
- databuf.Add(data, StrLen(data));
- databuf.Add(0);
- }
- break;
-
- case kLogParamFloat: {
- pData = unpack.GetData(sizeof(float));
- if(!pData)
- continue;
-
- float f = *(float *)pData;
-
- // log event name
- databuf.Add(event->fields[i].name, StrLen(event->fields[i].name));
- databuf.Add(0);
-
- // log event data
- StrPrintf(data, arrsize(data), L"%f", f);
- databuf.Add(data, StrLen(data));
- databuf.Add(0);
- }
- break;
-
- case kLogParamLong: {
- pData = unpack.GetData(sizeof(long));
- if(!pData)
- continue;
-
- long l = *(long *)pData;
-
- // log event name
- databuf.Add(event->fields[i].name, StrLen(event->fields[i].name));
- databuf.Add(0);
-
- // log event data
- StrPrintf(data, arrsize(data), L"%ld", l);
- databuf.Add(data, StrLen(data));
- databuf.Add(0);
- }
- break;
-
- case kLogParamLongLong: {
- pData = unpack.GetData(sizeof(long long));
- if(!pData)
- continue;
-
- long long ll = *(long long *)pData;
-
- // log event name
- databuf.Add(event->fields[i].name, StrLen(event->fields[i].name));
- databuf.Add(0);
-
- // log event data
- StrPrintf(data, arrsize(data), L"%lld", ll);
- databuf.Add(data, StrLen(data));
- databuf.Add(0);
- }
- break;
-
- case kLogParamUuid: {
- pData = unpack.GetData(sizeof(Uuid));
- if(!pData)
- continue;
-
- Uuid uuid = *(Uuid *)pData;
-
- // log event name
- databuf.Add(event->fields[i].name, StrLen(event->fields[i].name));
- databuf.Add(0);
-
- // log event data
- GuidToString(uuid, data, arrsize(data));
- databuf.Add(data, StrLen(data));
- databuf.Add(0);
- }
- break;
-
- case kLogParamStringW: {
- const wchar_t *str = unpack.GetString();
- if(!str) {
- continue;
- }
-
- // log event name
- databuf.Add(event->fields[i].name, StrLen(event->fields[i].name));
- databuf.Add(0);
-
- // log event data
- databuf.Add(str, StrLen(str));
- databuf.Add(0);
- }
- break;
- }
- }
- }
- databuf.Add(0);
-
- if(NetLogSrvCallback) {
- NetLogSrvCallback(
- event,
- databuf,
- buildId,
- addr,
- msg.timestamp,
- productId,
- buildType
- );
- }
- }
- else
- {
- LogMsg(kLogError, "Unable to log event - event not found. type: %d from server: %d. If it is a new event the log server needs to be updated.", msg.eventType, srvType);
- }
-
- return true;
-}
-
-
-/*****************************************************************************
-*
-* Module exports
-*
-***/
-
-//============================================================================
-void NetLogSrvInitialize () {
- s_running = true;
- AsyncSocketRegisterNotifyProc(
- kConnTypeSrvToLog,
- SocketNotifyProc,
- 0, // Accept all buildIds
- 0, // Accept all buildTypes
- 0, // Accept all branchIds
- 0 // Accept all product Ids
- );
- IniChangeAdd(L"Log", IniChangeCallback, &s_change);
-}
-
-//============================================================================
-void NetLogSrvShutdown () {
- if(s_change) {
- IniChangeRemove(s_change, true);
- s_change = false;
- }
-
- s_running = false;
- AsyncSocketUnregisterNotifyProc(
- kConnTypeSrvToLog,
- SocketNotifyProc,
- 0, // Accept all buildIds
- 0,
- 0, // Accept all branchIds
- 0
- );
-}
-
-//============================================================================
-void NetLogSrvDestroy () {
-
- while(s_perf[kNlSrvPerfConnCount])
- AsyncSleep(10);
-}
-
-//============================================================================
-void NetLogSrvRegisterCallback( void (*NlSrvCallback)(const NetLogEvent *, const ARRAY(wchar_t) &, unsigned, NetAddressNode &, uint64_t, unsigned, unsigned )) {
- NetLogSrvCallback = NlSrvCallback;
-}
-
-//============================================================================
-void LogConnIncRef (LogConn * conn) {
- conn->IncRef();
-}
-
-//============================================================================
-void LogConnDecRef (LogConn * conn) {
- conn->DecRef();
-}
-
-
-/*****************************************************************************
-*
-* Public exports
-*
-***/
-
-//============================================================================
-long NetLogSrvGetPerf (unsigned index) {
- ASSERT(index < kNlSrvNumPerf);
- return s_perf[index];
-}