diff --git a/Bot/Bot.vcxproj b/Bot/Bot.vcxproj index 5d7b0e5..6041625 100644 --- a/Bot/Bot.vcxproj +++ b/Bot/Bot.vcxproj @@ -101,7 +101,7 @@ - + diff --git a/Bot/Bot.vcxproj.filters b/Bot/Bot.vcxproj.filters index e11e6f6..0e62b61 100644 --- a/Bot/Bot.vcxproj.filters +++ b/Bot/Bot.vcxproj.filters @@ -49,7 +49,7 @@ - + Resource Files diff --git a/ChannelRelay/ChannelRelay.vcxproj b/ChannelRelay/ChannelRelay.vcxproj index 50e352a..a698648 100644 --- a/ChannelRelay/ChannelRelay.vcxproj +++ b/ChannelRelay/ChannelRelay.vcxproj @@ -75,7 +75,7 @@ - + diff --git a/ChannelRelay/ChannelRelay.vcxproj.filters b/ChannelRelay/ChannelRelay.vcxproj.filters index db13a8b..5037d3e 100644 --- a/ChannelRelay/ChannelRelay.vcxproj.filters +++ b/ChannelRelay/ChannelRelay.vcxproj.filters @@ -28,7 +28,7 @@ Resource Files - + Resource Files diff --git a/CoreCommands/CoreCommands.vcxproj b/CoreCommands/CoreCommands.vcxproj index c3ffabd..317fbdf 100644 --- a/CoreCommands/CoreCommands.vcxproj +++ b/CoreCommands/CoreCommands.vcxproj @@ -76,7 +76,7 @@ - + diff --git a/CoreCommands/CoreCommands.vcxproj.filters b/CoreCommands/CoreCommands.vcxproj.filters index a44f450..7712bac 100644 --- a/CoreCommands/CoreCommands.vcxproj.filters +++ b/CoreCommands/CoreCommands.vcxproj.filters @@ -18,7 +18,7 @@ Resource Files - + Resource Files diff --git a/ExtraCommands/ExtraCommands.vcxproj b/ExtraCommands/ExtraCommands.vcxproj index c789d45..4d27b73 100644 --- a/ExtraCommands/ExtraCommands.vcxproj +++ b/ExtraCommands/ExtraCommands.vcxproj @@ -75,7 +75,7 @@ - + diff --git a/ExtraCommands/ExtraCommands.vcxproj.filters b/ExtraCommands/ExtraCommands.vcxproj.filters index 962b5d1..4800491 100644 --- a/ExtraCommands/ExtraCommands.vcxproj.filters +++ b/ExtraCommands/ExtraCommands.vcxproj.filters @@ -18,7 +18,7 @@ Resource Files - + Resource Files diff --git a/FunCommands/FunCommands.vcxproj b/FunCommands/FunCommands.vcxproj index a2f1bca..26240b4 100644 --- a/FunCommands/FunCommands.vcxproj +++ b/FunCommands/FunCommands.vcxproj @@ -75,7 +75,7 @@ - + diff --git a/FunCommands/FunCommands.vcxproj.filters b/FunCommands/FunCommands.vcxproj.filters index bea1f66..f6aee8d 100644 --- a/FunCommands/FunCommands.vcxproj.filters +++ b/FunCommands/FunCommands.vcxproj.filters @@ -18,7 +18,7 @@ Resource Files - + Resource Files diff --git a/HTTPServer/HTTPServer.vcxproj b/HTTPServer/HTTPServer.vcxproj index 52d83e0..ab5e6b4 100644 --- a/HTTPServer/HTTPServer.vcxproj +++ b/HTTPServer/HTTPServer.vcxproj @@ -75,7 +75,7 @@ - + diff --git a/HTTPServer/HTTPServer.vcxproj.filters b/HTTPServer/HTTPServer.vcxproj.filters index 2db592d..f8a745d 100644 --- a/HTTPServer/HTTPServer.vcxproj.filters +++ b/HTTPServer/HTTPServer.vcxproj.filters @@ -18,7 +18,7 @@ Resource Files - + Resource Files diff --git a/IRC.Core/IRC.Core.vcxproj b/IRC.Core/IRC.Core.vcxproj index eca8021..e701f08 100644 --- a/IRC.Core/IRC.Core.vcxproj +++ b/IRC.Core/IRC.Core.vcxproj @@ -75,7 +75,7 @@ - + diff --git a/IRC.Core/IRC.Core.vcxproj.filters b/IRC.Core/IRC.Core.vcxproj.filters index ee8f459..c176c51 100644 --- a/IRC.Core/IRC.Core.vcxproj.filters +++ b/IRC.Core/IRC.Core.vcxproj.filters @@ -28,7 +28,7 @@ Resource Files - + Resource Files diff --git a/Jupiter b/Jupiter index 0963bf9..ae3294c 160000 --- a/Jupiter +++ b/Jupiter @@ -1 +1 @@ -Subproject commit 0963bf950533632a26f266f2f8575dc4344f22d8 +Subproject commit ae3294c72b799178bc79b312fe43f34c28deca86 diff --git a/Plugin.Example/Plugin.Example.vcxproj b/Plugin.Example/Plugin.Example.vcxproj index 5ef3426..393b417 100644 --- a/Plugin.Example/Plugin.Example.vcxproj +++ b/Plugin.Example/Plugin.Example.vcxproj @@ -75,7 +75,7 @@ - + diff --git a/Plugin.Example/Plugin.Example.vcxproj.filters b/Plugin.Example/Plugin.Example.vcxproj.filters index bd2fd23..f7cd026 100644 --- a/Plugin.Example/Plugin.Example.vcxproj.filters +++ b/Plugin.Example/Plugin.Example.vcxproj.filters @@ -28,7 +28,7 @@ Resource Files - + Resource Files diff --git a/Plugin.Template/Plugin.Template.vcxproj b/Plugin.Template/Plugin.Template.vcxproj index 02a6afe..119632d 100644 --- a/Plugin.Template/Plugin.Template.vcxproj +++ b/Plugin.Template/Plugin.Template.vcxproj @@ -75,7 +75,7 @@ - + diff --git a/Plugin.Template/Plugin.Template.vcxproj.filters b/Plugin.Template/Plugin.Template.vcxproj.filters index bd2fd23..f7cd026 100644 --- a/Plugin.Template/Plugin.Template.vcxproj.filters +++ b/Plugin.Template/Plugin.Template.vcxproj.filters @@ -28,7 +28,7 @@ Resource Files - + Resource Files diff --git a/PluginManager/PluginManager.vcxproj b/PluginManager/PluginManager.vcxproj index 3abf96b..8630669 100644 --- a/PluginManager/PluginManager.vcxproj +++ b/PluginManager/PluginManager.vcxproj @@ -76,7 +76,7 @@ - + diff --git a/PluginManager/PluginManager.vcxproj.filters b/PluginManager/PluginManager.vcxproj.filters index 34d708a..3a01235 100644 --- a/PluginManager/PluginManager.vcxproj.filters +++ b/PluginManager/PluginManager.vcxproj.filters @@ -18,7 +18,7 @@ Resource Files - + Resource Files diff --git a/RenX.AlwaysRecord/RenX.AlwaysRecord.vcxproj b/RenX.AlwaysRecord/RenX.AlwaysRecord.vcxproj index 3f0d1f5..333fcb8 100644 --- a/RenX.AlwaysRecord/RenX.AlwaysRecord.vcxproj +++ b/RenX.AlwaysRecord/RenX.AlwaysRecord.vcxproj @@ -75,7 +75,7 @@ - + diff --git a/RenX.AlwaysRecord/RenX.AlwaysRecord.vcxproj.filters b/RenX.AlwaysRecord/RenX.AlwaysRecord.vcxproj.filters index d9b473c..51e33df 100644 --- a/RenX.AlwaysRecord/RenX.AlwaysRecord.vcxproj.filters +++ b/RenX.AlwaysRecord/RenX.AlwaysRecord.vcxproj.filters @@ -31,7 +31,7 @@ Resource Files - + Resource Files diff --git a/RenX.Announcements/RenX.Announcements.vcxproj b/RenX.Announcements/RenX.Announcements.vcxproj index c613ef0..49c8213 100644 --- a/RenX.Announcements/RenX.Announcements.vcxproj +++ b/RenX.Announcements/RenX.Announcements.vcxproj @@ -75,7 +75,7 @@ - + diff --git a/RenX.Announcements/RenX.Announcements.vcxproj.filters b/RenX.Announcements/RenX.Announcements.vcxproj.filters index d23c2ff..a09426b 100644 --- a/RenX.Announcements/RenX.Announcements.vcxproj.filters +++ b/RenX.Announcements/RenX.Announcements.vcxproj.filters @@ -21,7 +21,7 @@ Resource Files - + Resource Files diff --git a/RenX.Commands/RenX.Commands.vcxproj b/RenX.Commands/RenX.Commands.vcxproj index ac81f7c..43549e6 100644 --- a/RenX.Commands/RenX.Commands.vcxproj +++ b/RenX.Commands/RenX.Commands.vcxproj @@ -75,7 +75,7 @@ - + Document diff --git a/RenX.Commands/RenX.Commands.vcxproj.filters b/RenX.Commands/RenX.Commands.vcxproj.filters index 035bc98..d556510 100644 --- a/RenX.Commands/RenX.Commands.vcxproj.filters +++ b/RenX.Commands/RenX.Commands.vcxproj.filters @@ -21,7 +21,7 @@ Resource Files - + Resource Files diff --git a/RenX.Core/RenX.Core.vcxproj b/RenX.Core/RenX.Core.vcxproj index cf248c7..53bddcd 100644 --- a/RenX.Core/RenX.Core.vcxproj +++ b/RenX.Core/RenX.Core.vcxproj @@ -98,7 +98,7 @@ - + diff --git a/RenX.Core/RenX.Core.vcxproj.filters b/RenX.Core/RenX.Core.vcxproj.filters index 7783403..ed86325 100644 --- a/RenX.Core/RenX.Core.vcxproj.filters +++ b/RenX.Core/RenX.Core.vcxproj.filters @@ -18,7 +18,7 @@ Resource Files - + Resource Files diff --git a/RenX.Core/RenX_Server.cpp b/RenX.Core/RenX_Server.cpp index d828a2e..f904a01 100644 --- a/RenX.Core/RenX_Server.cpp +++ b/RenX.Core/RenX_Server.cpp @@ -1388,7 +1388,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) RenX::PlayerInfo *player; if (this->isSeamless() == false) - RenX::Server::wipePlayers(); + this->wipePlayers(); else if (this->players.size() != 0) { for (Jupiter::DLList::Node *n = this->players.getNode(0); n != nullptr; n = n->next) diff --git a/RenX.ExcessiveHeadshots/RenX.ExcessiveHeadshots.vcxproj b/RenX.ExcessiveHeadshots/RenX.ExcessiveHeadshots.vcxproj index a5ea79d..f8fd8ee 100644 --- a/RenX.ExcessiveHeadshots/RenX.ExcessiveHeadshots.vcxproj +++ b/RenX.ExcessiveHeadshots/RenX.ExcessiveHeadshots.vcxproj @@ -75,7 +75,7 @@ - + diff --git a/RenX.ExcessiveHeadshots/RenX.ExcessiveHeadshots.vcxproj.filters b/RenX.ExcessiveHeadshots/RenX.ExcessiveHeadshots.vcxproj.filters index 0bed5bc..f6c957f 100644 --- a/RenX.ExcessiveHeadshots/RenX.ExcessiveHeadshots.vcxproj.filters +++ b/RenX.ExcessiveHeadshots/RenX.ExcessiveHeadshots.vcxproj.filters @@ -21,7 +21,7 @@ Resource Files - + Resource Files diff --git a/RenX.ExtraLogging/RenX.ExtraLogging.vcxproj b/RenX.ExtraLogging/RenX.ExtraLogging.vcxproj index 47e4882..e987e3f 100644 --- a/RenX.ExtraLogging/RenX.ExtraLogging.vcxproj +++ b/RenX.ExtraLogging/RenX.ExtraLogging.vcxproj @@ -75,7 +75,7 @@ - + diff --git a/RenX.ExtraLogging/RenX.ExtraLogging.vcxproj.filters b/RenX.ExtraLogging/RenX.ExtraLogging.vcxproj.filters index 35ec5ae..d0af5f3 100644 --- a/RenX.ExtraLogging/RenX.ExtraLogging.vcxproj.filters +++ b/RenX.ExtraLogging/RenX.ExtraLogging.vcxproj.filters @@ -21,7 +21,7 @@ Resource Files - + Resource Files diff --git a/RenX.Greetings/RenX.Greetings.vcxproj b/RenX.Greetings/RenX.Greetings.vcxproj index 3aa47a4..7ab9a75 100644 --- a/RenX.Greetings/RenX.Greetings.vcxproj +++ b/RenX.Greetings/RenX.Greetings.vcxproj @@ -76,7 +76,7 @@ - + diff --git a/RenX.Greetings/RenX.Greetings.vcxproj.filters b/RenX.Greetings/RenX.Greetings.vcxproj.filters index 2a35b21..b224b94 100644 --- a/RenX.Greetings/RenX.Greetings.vcxproj.filters +++ b/RenX.Greetings/RenX.Greetings.vcxproj.filters @@ -21,7 +21,7 @@ Resource Files - + Resource Files diff --git a/RenX.HybridUUID/RenX.HybridUUID.vcxproj b/RenX.HybridUUID/RenX.HybridUUID.vcxproj index c3f9f47..7388481 100644 --- a/RenX.HybridUUID/RenX.HybridUUID.vcxproj +++ b/RenX.HybridUUID/RenX.HybridUUID.vcxproj @@ -75,7 +75,7 @@ - + diff --git a/RenX.HybridUUID/RenX.HybridUUID.vcxproj.filters b/RenX.HybridUUID/RenX.HybridUUID.vcxproj.filters index 274faf5..ea981f8 100644 --- a/RenX.HybridUUID/RenX.HybridUUID.vcxproj.filters +++ b/RenX.HybridUUID/RenX.HybridUUID.vcxproj.filters @@ -21,7 +21,7 @@ Resource Files - + Resource Files diff --git a/RenX.IRCJoin/RenX.IRCJoin.vcxproj b/RenX.IRCJoin/RenX.IRCJoin.vcxproj index 0488448..2e6f3a5 100644 --- a/RenX.IRCJoin/RenX.IRCJoin.vcxproj +++ b/RenX.IRCJoin/RenX.IRCJoin.vcxproj @@ -75,7 +75,7 @@ - + diff --git a/RenX.IRCJoin/RenX.IRCJoin.vcxproj.filters b/RenX.IRCJoin/RenX.IRCJoin.vcxproj.filters index b8f58d0..81b9b33 100644 --- a/RenX.IRCJoin/RenX.IRCJoin.vcxproj.filters +++ b/RenX.IRCJoin/RenX.IRCJoin.vcxproj.filters @@ -21,7 +21,7 @@ Resource Files - + Resource Files diff --git a/RenX.Ladder.All-Time/RenX.Ladder.All-Time.vcxproj b/RenX.Ladder.All-Time/RenX.Ladder.All-Time.vcxproj index 5bab885..0aeed76 100644 --- a/RenX.Ladder.All-Time/RenX.Ladder.All-Time.vcxproj +++ b/RenX.Ladder.All-Time/RenX.Ladder.All-Time.vcxproj @@ -75,7 +75,7 @@ - + diff --git a/RenX.Ladder.All-Time/RenX.Ladder.All-Time.vcxproj.filters b/RenX.Ladder.All-Time/RenX.Ladder.All-Time.vcxproj.filters index 3199366..e16b176 100644 --- a/RenX.Ladder.All-Time/RenX.Ladder.All-Time.vcxproj.filters +++ b/RenX.Ladder.All-Time/RenX.Ladder.All-Time.vcxproj.filters @@ -21,7 +21,7 @@ Resource Files - + Resource Files diff --git a/RenX.Ladder.Daily/RenX.Ladder.Daily.vcxproj b/RenX.Ladder.Daily/RenX.Ladder.Daily.vcxproj index a43cd17..c30ee22 100644 --- a/RenX.Ladder.Daily/RenX.Ladder.Daily.vcxproj +++ b/RenX.Ladder.Daily/RenX.Ladder.Daily.vcxproj @@ -75,7 +75,7 @@ - + diff --git a/RenX.Ladder.Daily/RenX.Ladder.Daily.vcxproj.filters b/RenX.Ladder.Daily/RenX.Ladder.Daily.vcxproj.filters index 21fc8b3..744caa1 100644 --- a/RenX.Ladder.Daily/RenX.Ladder.Daily.vcxproj.filters +++ b/RenX.Ladder.Daily/RenX.Ladder.Daily.vcxproj.filters @@ -26,7 +26,7 @@ Resource Files - + Resource Files diff --git a/RenX.Ladder.Monthly/RenX.Ladder.Monthly.vcxproj b/RenX.Ladder.Monthly/RenX.Ladder.Monthly.vcxproj index bbe7002..db817ce 100644 --- a/RenX.Ladder.Monthly/RenX.Ladder.Monthly.vcxproj +++ b/RenX.Ladder.Monthly/RenX.Ladder.Monthly.vcxproj @@ -75,7 +75,7 @@ - + diff --git a/RenX.Ladder.Monthly/RenX.Ladder.Monthly.vcxproj.filters b/RenX.Ladder.Monthly/RenX.Ladder.Monthly.vcxproj.filters index 81306c7..70b6503 100644 --- a/RenX.Ladder.Monthly/RenX.Ladder.Monthly.vcxproj.filters +++ b/RenX.Ladder.Monthly/RenX.Ladder.Monthly.vcxproj.filters @@ -26,7 +26,7 @@ Resource Files - + Resource Files diff --git a/RenX.Ladder.Web/RenX.Ladder.Web.vcxproj b/RenX.Ladder.Web/RenX.Ladder.Web.vcxproj index 3bddbed..df26a39 100644 --- a/RenX.Ladder.Web/RenX.Ladder.Web.vcxproj +++ b/RenX.Ladder.Web/RenX.Ladder.Web.vcxproj @@ -75,7 +75,7 @@ - + diff --git a/RenX.Ladder.Web/RenX.Ladder.Web.vcxproj.filters b/RenX.Ladder.Web/RenX.Ladder.Web.vcxproj.filters index 1bd8865..c44f99c 100644 --- a/RenX.Ladder.Web/RenX.Ladder.Web.vcxproj.filters +++ b/RenX.Ladder.Web/RenX.Ladder.Web.vcxproj.filters @@ -31,7 +31,7 @@ Resource Files - + Resource Files diff --git a/RenX.Ladder.Weekly/RenX.Ladder.Weekly.vcxproj b/RenX.Ladder.Weekly/RenX.Ladder.Weekly.vcxproj index e2492f6..837a949 100644 --- a/RenX.Ladder.Weekly/RenX.Ladder.Weekly.vcxproj +++ b/RenX.Ladder.Weekly/RenX.Ladder.Weekly.vcxproj @@ -75,7 +75,7 @@ - + diff --git a/RenX.Ladder.Weekly/RenX.Ladder.Weekly.vcxproj.filters b/RenX.Ladder.Weekly/RenX.Ladder.Weekly.vcxproj.filters index 4e22405..c1daad8 100644 --- a/RenX.Ladder.Weekly/RenX.Ladder.Weekly.vcxproj.filters +++ b/RenX.Ladder.Weekly/RenX.Ladder.Weekly.vcxproj.filters @@ -26,7 +26,7 @@ Resource Files - + Resource Files diff --git a/RenX.Ladder.Yearly/RenX.Ladder.Yearly.vcxproj b/RenX.Ladder.Yearly/RenX.Ladder.Yearly.vcxproj index ce5eef8..a899442 100644 --- a/RenX.Ladder.Yearly/RenX.Ladder.Yearly.vcxproj +++ b/RenX.Ladder.Yearly/RenX.Ladder.Yearly.vcxproj @@ -75,7 +75,7 @@ - + diff --git a/RenX.Ladder.Yearly/RenX.Ladder.Yearly.vcxproj.filters b/RenX.Ladder.Yearly/RenX.Ladder.Yearly.vcxproj.filters index 6a93ff7..1bb02e7 100644 --- a/RenX.Ladder.Yearly/RenX.Ladder.Yearly.vcxproj.filters +++ b/RenX.Ladder.Yearly/RenX.Ladder.Yearly.vcxproj.filters @@ -26,7 +26,7 @@ Resource Files - + Resource Files diff --git a/RenX.Ladder/RenX.Ladder.vcxproj b/RenX.Ladder/RenX.Ladder.vcxproj index fcc3980..197442d 100644 --- a/RenX.Ladder/RenX.Ladder.vcxproj +++ b/RenX.Ladder/RenX.Ladder.vcxproj @@ -75,7 +75,7 @@ - + diff --git a/RenX.Ladder/RenX.Ladder.vcxproj.filters b/RenX.Ladder/RenX.Ladder.vcxproj.filters index a3835d6..165f028 100644 --- a/RenX.Ladder/RenX.Ladder.vcxproj.filters +++ b/RenX.Ladder/RenX.Ladder.vcxproj.filters @@ -21,7 +21,7 @@ Resource Files - + Resource Files diff --git a/RenX.Listen/RenX.Listen.vcxproj b/RenX.Listen/RenX.Listen.vcxproj index 348d222..9663b7a 100644 --- a/RenX.Listen/RenX.Listen.vcxproj +++ b/RenX.Listen/RenX.Listen.vcxproj @@ -75,7 +75,7 @@ - + diff --git a/RenX.Listen/RenX.Listen.vcxproj.filters b/RenX.Listen/RenX.Listen.vcxproj.filters index 2c7667e..2480076 100644 --- a/RenX.Listen/RenX.Listen.vcxproj.filters +++ b/RenX.Listen/RenX.Listen.vcxproj.filters @@ -21,7 +21,7 @@ Resource Files - + Resource Files diff --git a/RenX.Logging/RenX.Logging.vcxproj b/RenX.Logging/RenX.Logging.vcxproj index 9dfdcd7..3387246 100644 --- a/RenX.Logging/RenX.Logging.vcxproj +++ b/RenX.Logging/RenX.Logging.vcxproj @@ -75,7 +75,7 @@ - + diff --git a/RenX.Logging/RenX.Logging.vcxproj.filters b/RenX.Logging/RenX.Logging.vcxproj.filters index e30f257..024f4ad 100644 --- a/RenX.Logging/RenX.Logging.vcxproj.filters +++ b/RenX.Logging/RenX.Logging.vcxproj.filters @@ -21,7 +21,7 @@ Resource Files - + Resource Files diff --git a/RenX.Medals/RenX.Medals.vcxproj b/RenX.Medals/RenX.Medals.vcxproj index 3420b1a..dcc2f02 100644 --- a/RenX.Medals/RenX.Medals.vcxproj +++ b/RenX.Medals/RenX.Medals.vcxproj @@ -76,7 +76,7 @@ - + diff --git a/RenX.Medals/RenX.Medals.vcxproj.filters b/RenX.Medals/RenX.Medals.vcxproj.filters index 965f9a2..b86921f 100644 --- a/RenX.Medals/RenX.Medals.vcxproj.filters +++ b/RenX.Medals/RenX.Medals.vcxproj.filters @@ -21,7 +21,7 @@ Resource Files - + Resource Files diff --git a/RenX.MinPlayers/RenX.MinPlayers.vcxproj b/RenX.MinPlayers/RenX.MinPlayers.vcxproj index 2b3f714..e1abcc7 100644 --- a/RenX.MinPlayers/RenX.MinPlayers.vcxproj +++ b/RenX.MinPlayers/RenX.MinPlayers.vcxproj @@ -75,7 +75,7 @@ - + diff --git a/RenX.MinPlayers/RenX.MinPlayers.vcxproj.filters b/RenX.MinPlayers/RenX.MinPlayers.vcxproj.filters index 48d98fa..cee27d3 100644 --- a/RenX.MinPlayers/RenX.MinPlayers.vcxproj.filters +++ b/RenX.MinPlayers/RenX.MinPlayers.vcxproj.filters @@ -31,7 +31,7 @@ Resource Files - + Resource Files diff --git a/RenX.ModSystem/RenX.ModSystem.vcxproj b/RenX.ModSystem/RenX.ModSystem.vcxproj index 787ee50..7a43eef 100644 --- a/RenX.ModSystem/RenX.ModSystem.vcxproj +++ b/RenX.ModSystem/RenX.ModSystem.vcxproj @@ -75,7 +75,7 @@ - + diff --git a/RenX.ModSystem/RenX.ModSystem.vcxproj.filters b/RenX.ModSystem/RenX.ModSystem.vcxproj.filters index c68443c..6263c99 100644 --- a/RenX.ModSystem/RenX.ModSystem.vcxproj.filters +++ b/RenX.ModSystem/RenX.ModSystem.vcxproj.filters @@ -21,7 +21,7 @@ Resource Files - + Resource Files diff --git a/RenX.Net/RenX.Net.vcxproj b/RenX.Net/RenX.Net.vcxproj new file mode 100644 index 0000000..2f9cd6e --- /dev/null +++ b/RenX.Net/RenX.Net.vcxproj @@ -0,0 +1,86 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {29C995BB-6A23-4704-BF8D-EA177D5FC7A5} + RenX.Net + + + + Application + true + v140 + MultiByte + + + DynamicLibrary + false + v140 + true + Unicode + + + + + + + + + + + + + $(SolutionDir)$(Configuration)\Plugins\ + AllRules.ruleset + + + + Level3 + Disabled + true + + + true + + + + + Level3 + MaxSpeed + true + true + true + ../Bot;../Jupiter;../RenX.Core;../HTTPServer + _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + + + true + true + true + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/RenX.Net/RenX.Net.vcxproj.filters b/RenX.Net/RenX.Net.vcxproj.filters new file mode 100644 index 0000000..66d45c6 --- /dev/null +++ b/RenX.Net/RenX.Net.vcxproj.filters @@ -0,0 +1,41 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Header Files + + + + + Source Files + + + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + \ No newline at end of file diff --git a/RenX.Net/RenX_Net.cpp b/RenX.Net/RenX_Net.cpp new file mode 100644 index 0000000..471c869 --- /dev/null +++ b/RenX.Net/RenX_Net.cpp @@ -0,0 +1,274 @@ +/** + * Copyright (C) 2016 Jessica James. + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION + * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * Written by Jessica James + */ + +#include "RenX_Net.h" + +using namespace Jupiter::literals; + +constexpr ProductID RENEGADE_X = 0x01; + +constexpr RequestID REQUEST_SERVER_LIST = 0x01; // version_number +constexpr RequestID REQUEST_SERVER_LIST_UPDATE = 0x02; // version_number, revision_id +constexpr RequestID REQUEST_SERVER_DATA = 0x03; // server_id + +constexpr int REQUEST_SIZE_TABLE[] = +{ + -1, // Invalid request + sizeof(int32_t), // REQUEST_SERVER_LIST + sizeof(int32_t) + sizeof(int32_t) // REQUEST_SERVER_LIST_UPDATE + // sizeof (int32_t) // REQUEST_SERVER_DATA +}; + +constexpr size_t minimum_request_size = REQUEST_SIZE_TABLE[REQUEST_SERVER_LIST]; // Size of smallest request +constexpr size_t maximum_request_size = REQUEST_SIZE_TABLE[REQUEST_SERVER_LIST_UPDATE]; // Size of largest request + +// Size of packet header +constexpr size_t packet_header_size = sizeof(ProductID) + sizeof(RequestID); + +constexpr int getRequestSize(RequestID in_request_id) +{ + return in_request_id >= sizeof(REQUEST_SIZE_TABLE) / sizeof(int) + ? -1 // Invalid request + : REQUEST_SIZE_TABLE[in_request_id]; +} + +/** Plugin initialization and destruction */ + +bool RenX_NetPlugin::initialize() //(const Jupiter::CStringType &bind_address, uint16_t bind_port, bool &out_success, std::chrono::milliseconds in_timeout_period) +{ + m_timeout_period = std::chrono::milliseconds(this->config.getLongLong(Jupiter::ReferenceString::empty, "TimeoutPeriod"_jrs, 10000)); + + if (m_server_socket.bind(Jupiter::CStringS(this->config.get(Jupiter::ReferenceString::empty, "Address"_jrs)).c_str(), this->config.getInt(Jupiter::ReferenceString::empty, "Port"_jrs, 21338), true) == false) + return false; + + m_server_socket.setBlocking(false); + return true; +} + +RenX_NetPlugin::~RenX_NetPlugin() +{ + m_server_socket.close(); +} + +int RenX_NetPlugin::OnRehash() +{ + Jupiter::Plugin::OnRehash(); + + return 0; +} + +/** Server List functions */ + +void RenX_NetPlugin::assignServerIDs() +{ +} + +void RenX_NetPlugin::addServerToServerList(RenX::Server *server) +{ +} + +void RenX_NetPlugin::updateServerList() +{ +} + +/** Client processing */ + +void RenX_NetPlugin::process_request(RenX_NetPlugin::Client &client) +{ + size_t index; + const uint32_t *request_params; + ServerList *list; + + request_params = reinterpret_cast(client.m_request_buffer.ptr()); + + switch (client.m_request_id) + { + case REQUEST_SERVER_LIST: + index = 0; + if (m_server_list.size() != 0) + { + while (index != m_server_list.size()) + { + list = m_server_list.get(index); + if (list->version_number == *request_params) + { + client.sock.send(list->data); + break; + } + + if (++index == m_server_list.size()) + { + // Version not found + break; + } + } + } + // else // m_server_list not initialized correctly (misconfiguration) + break; + + default: // Invalid request. Reset timeout to destroy on next loop. + client.timeout = std::chrono::steady_clock::now(); + break; + } + + client.sock.shutdown(); +} + +int RenX_NetPlugin::think() +{ + RenX_NetPlugin::Client *client; + Jupiter::Socket *sock; + int request_packet_size; + Jupiter::DLList::Node *node; + Jupiter::DLList::Node *tmp; + + // handle new clients + while ((sock = m_server_socket.accept()) != nullptr) + { + sock->setBlocking(false); + request_packet_size = sock->peek(); + + if (request_packet_size > maximum_request_packet_size // This is larger than expected (invalid) request. Toss the socket. + || (request_packet_size <= 0 && sock->getLastError() != 10035)) // Error! + delete sock; + else + { + client = new RenX_NetPlugin::Client(); + client->sock = std::move(*sock); + client->timeout = std::chrono::steady_clock::now() + m_timeout_period; + + if (request_packet_size == expected_request_packet_size) // we have a full request + { + process_request(*client); + + m_clients_pending_close.add(client); + } + else // request is not complete; toss it to further processing + m_clients_processing.add(client); + } + } + + // check processing clients for remainder of data; timeout as necessary + if (m_clients_processing.size() != 0) + { + node = m_clients_processing.getNode(0); + while (node != nullptr) + { + client = node->data; + request_packet_size = client->sock.peek(); + + if (request_packet_size == expected_request_packet_size) // Full request + { + process_request(*client); + + tmp = node; + node = node->next; + + m_clients_processing.remove(tmp); + + client->timeout = std::chrono::steady_clock::now() + m_timeout_period; + m_clients_pending_close.add(client); + } + else if (request_packet_size > expected_request_packet_size // Invalid request + || client->timeout <= std::chrono::steady_clock::now() // Incomplete request & timed out + || (request_packet_size <= 0 && client->sock.getLastError() != 10035)) // Error! + { + client->sock.close(); + + tmp = node; + node = node->next; + + delete m_clients_processing.remove(tmp); + } + else // Incomplete request + node = node->next; + } + } + + // check old clients for clean close; timeout as necessary + if (m_clients_pending_close.size() != 0) + { + node = m_clients_pending_close.getNode(0); + while (node != nullptr) + { + client = node->data; + request_packet_size = client->sock.recv(); + + if (request_packet_size == 0 // Shutdown successfully + || (request_packet_size < 0 && client->sock.getLastError() != 10035) // Error! + || client->timeout <= std::chrono::steady_clock::now()) // Timeout + { + client->sock.close(); + + tmp = node; + node = node->next; + + delete m_clients_pending_close.remove(tmp); + } + else // Still pending; go to next + node = node->next; + } + } + + return 0; +} + +/** Events */ + +void RenX_NetPlugin::RenX_OnServerFullyConnected(RenX::Server *server) +{ + if (++m_server_id == 0) // Overflow; this will actually invalidate the results of any previous server list + this->assignServerIDs(); + else + server->varData.set(this->getName(), "i"_jrs, Jupiter::ReferenceString(reinterpret_cast(&m_server_id), sizeof(m_server_id))); + + // Server added; append + this->addServerToServerList(server); +} + +void RenX_NetPlugin::RenX_OnServerDisconnect(RenX::Server *server, RenX::DisconnectReason reason) +{ + // Server removed; update + this->updateServerList(); +} + +void RenX_NetPlugin::RenX_OnJoin(RenX::Server *server, const RenX::PlayerInfo *player) +{ + // User count changed; update + this->updateServerList(); +} + +void RenX_NetPlugin::RenX_OnPart(RenX::Server *server, const RenX::PlayerInfo *player) +{ + // User count changed; update + this->updateServerList(); +} + +void RenX_NetPlugin::RenX_OnMapLoad(RenX::Server *server, const Jupiter::ReadableString &map) +{ + // Level name changed; update + this->updateServerList(); +} + +// Plugin instantiation and entry point. +RenX_NetPlugin pluginInstance; + +extern "C" __declspec(dllexport) Jupiter::Plugin *getPlugin() +{ + return &pluginInstance; +} diff --git a/RenX.Net/RenX_Net.h b/RenX.Net/RenX_Net.h new file mode 100644 index 0000000..1bd8685 --- /dev/null +++ b/RenX.Net/RenX_Net.h @@ -0,0 +1,93 @@ +/** + * Copyright (C) 2016 Jessica James. + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION + * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * Written by Jessica James + */ + +#if !defined _RENX_NET_GAME_H_HEADER +#define _RENX_NET_GAME_H_HEADER + +#include +#include "Jupiter/Thinker.h" +#include "Jupiter/CString.h" +#include "Jupiter/TCPSocket.h" +#include "Jupiter/DLList.h" +#include "Jupiter/ArrayList.h" +#include "RenX_Plugin.h" +#include "RenX_Server.h" + +typedef uint8_t ProductID; +typedef uint8_t RequestID; +typedef uint32_t ServerID; + +class RenX_NetPlugin : public RenX::Plugin +{ +public: + + struct Client + { + Jupiter::Socket sock; + std::chrono::steady_clock::time_point timeout; + + ProductID m_product_id; + RequestID m_request_id; + Jupiter::String m_request_buffer; + }; + + struct ServerList + { + uint32_t version_number = 0; + uint32_t revision_id = 0; + + Jupiter::String data; + Jupiter::ArrayList servers; + }; + + void assignServerIDs(); + void addServerToServerList(RenX::Server *server); + void updateServerList(); + ~RenX_NetPlugin(); + +public: // Jupiter::Plugin + virtual bool initialize() override; + int OnRehash() override; + int think() override; + +public: // RenX::Plugin + void RenX_OnServerFullyConnected(RenX::Server *server) override; + void RenX_OnServerDisconnect(RenX::Server *server, RenX::DisconnectReason reason) override; + void RenX_OnJoin(RenX::Server *server, const RenX::PlayerInfo *player) override; + void RenX_OnPart(RenX::Server *server, const RenX::PlayerInfo *player) override; + void RenX_OnMapLoad(RenX::Server *server, const Jupiter::ReadableString &map) override; + +private: + void process_request(Client &client); + + std::chrono::milliseconds m_ping_frequency; + std::chrono::milliseconds m_ping_timeout; + + Jupiter::TCPSocket m_server_socket; + Jupiter::DLList m_clients; + Jupiter::DLList m_clients_pending_close; + + uint32_t m_server_id; + + uint32_t m_min_server_version; + uint32_t m_max_server_version; + + Jupiter::ArrayList m_server_list; +}; + +#endif // _RENX_SERVERLIST_GAME_H_HEADER \ No newline at end of file diff --git a/RenX.NicknameUUID/RenX.NicknameUUID.vcxproj b/RenX.NicknameUUID/RenX.NicknameUUID.vcxproj index 4bc6055..ff38cdf 100644 --- a/RenX.NicknameUUID/RenX.NicknameUUID.vcxproj +++ b/RenX.NicknameUUID/RenX.NicknameUUID.vcxproj @@ -75,7 +75,7 @@ - + diff --git a/RenX.NicknameUUID/RenX.NicknameUUID.vcxproj.filters b/RenX.NicknameUUID/RenX.NicknameUUID.vcxproj.filters index d35c490..8d680c1 100644 --- a/RenX.NicknameUUID/RenX.NicknameUUID.vcxproj.filters +++ b/RenX.NicknameUUID/RenX.NicknameUUID.vcxproj.filters @@ -21,7 +21,7 @@ Resource Files - + Resource Files diff --git a/RenX.Plugin.Template/RenX.Plugin.Template.vcxproj b/RenX.Plugin.Template/RenX.Plugin.Template.vcxproj index 696ab3e..24214af 100644 --- a/RenX.Plugin.Template/RenX.Plugin.Template.vcxproj +++ b/RenX.Plugin.Template/RenX.Plugin.Template.vcxproj @@ -75,7 +75,7 @@ - + diff --git a/RenX.Plugin.Template/RenX.Plugin.Template.vcxproj.filters b/RenX.Plugin.Template/RenX.Plugin.Template.vcxproj.filters index 25968fc..e301d20 100644 --- a/RenX.Plugin.Template/RenX.Plugin.Template.vcxproj.filters +++ b/RenX.Plugin.Template/RenX.Plugin.Template.vcxproj.filters @@ -31,7 +31,7 @@ Resource Files - + Resource Files diff --git a/RenX.ServerList/RenX.ServerList.vcxproj b/RenX.ServerList/RenX.ServerList.vcxproj index 7061318..c8837d0 100644 --- a/RenX.ServerList/RenX.ServerList.vcxproj +++ b/RenX.ServerList/RenX.ServerList.vcxproj @@ -75,7 +75,7 @@ - + diff --git a/RenX.ServerList/RenX.ServerList.vcxproj.filters b/RenX.ServerList/RenX.ServerList.vcxproj.filters index 14c4699..7758384 100644 --- a/RenX.ServerList/RenX.ServerList.vcxproj.filters +++ b/RenX.ServerList/RenX.ServerList.vcxproj.filters @@ -31,7 +31,7 @@ Resource Files - + Resource Files diff --git a/RenX.SetJoin/RenX.SetJoin.vcxproj b/RenX.SetJoin/RenX.SetJoin.vcxproj index 079d664..4a726c9 100644 --- a/RenX.SetJoin/RenX.SetJoin.vcxproj +++ b/RenX.SetJoin/RenX.SetJoin.vcxproj @@ -75,7 +75,7 @@ - + diff --git a/RenX.SetJoin/RenX.SetJoin.vcxproj.filters b/RenX.SetJoin/RenX.SetJoin.vcxproj.filters index 6340f48..4ab7674 100644 --- a/RenX.SetJoin/RenX.SetJoin.vcxproj.filters +++ b/RenX.SetJoin/RenX.SetJoin.vcxproj.filters @@ -21,7 +21,7 @@ Resource Files - + Resource Files diff --git a/RenX.Warn/RenX.Warn.vcxproj b/RenX.Warn/RenX.Warn.vcxproj index 0dac73d..b3a6d9c 100644 --- a/RenX.Warn/RenX.Warn.vcxproj +++ b/RenX.Warn/RenX.Warn.vcxproj @@ -75,7 +75,7 @@ - + diff --git a/RenX.Warn/RenX.Warn.vcxproj.filters b/RenX.Warn/RenX.Warn.vcxproj.filters index 56f02df..eac43d6 100644 --- a/RenX.Warn/RenX.Warn.vcxproj.filters +++ b/RenX.Warn/RenX.Warn.vcxproj.filters @@ -21,7 +21,7 @@ Resource Files - + Resource Files diff --git a/SetJoin/SetJoin.vcxproj b/SetJoin/SetJoin.vcxproj index 2c74eed..242cdee 100644 --- a/SetJoin/SetJoin.vcxproj +++ b/SetJoin/SetJoin.vcxproj @@ -75,7 +75,7 @@ - + diff --git a/SetJoin/SetJoin.vcxproj.filters b/SetJoin/SetJoin.vcxproj.filters index 97446f3..3dd58a2 100644 --- a/SetJoin/SetJoin.vcxproj.filters +++ b/SetJoin/SetJoin.vcxproj.filters @@ -18,7 +18,7 @@ Resource Files - + Resource Files