1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-15 11:03:00 +01:00

Start implementing TCP API

This commit is contained in:
Ted John
2020-08-17 03:53:37 +01:00
parent 359bbee9f5
commit dce547af99
9 changed files with 449 additions and 1 deletions

View File

@@ -33,6 +33,7 @@
# include "ScObject.hpp"
# include "ScPark.hpp"
# include "ScRide.hpp"
# include "ScSocketServer.hpp"
# include "ScTile.hpp"
# include <iostream>
@@ -41,7 +42,7 @@
using namespace OpenRCT2;
using namespace OpenRCT2::Scripting;
static constexpr int32_t OPENRCT2_PLUGIN_API_VERSION = 3;
static constexpr int32_t OPENRCT2_PLUGIN_API_VERSION = 4;
struct ExpressionStringifier final
{
@@ -393,6 +394,8 @@ void ScriptEngine::Initialise()
ScVehicle::Register(ctx);
ScPeep::Register(ctx);
ScGuest::Register(ctx);
ScSocket::Register(ctx);
ScSocketServer::Register(ctx);
ScStaff::Register(ctx);
dukglue_register_global(ctx, std::make_shared<ScCheats>(), "cheats");
@@ -479,6 +482,7 @@ void ScriptEngine::StopPlugin(std::shared_ptr<Plugin> plugin)
if (plugin->HasStarted())
{
RemoveCustomGameActions(plugin);
RemoveSockets(plugin);
_hookEngine.UnsubscribeAll(plugin);
for (auto callback : _pluginStoppedSubscriptions)
{
@@ -640,6 +644,7 @@ void ScriptEngine::Update()
}
}
UpdateSockets();
ProcessREPL();
}
@@ -1127,6 +1132,41 @@ void ScriptEngine::SaveSharedStorage()
}
}
void ScriptEngine::AddSocket(const std::shared_ptr<ScSocketBase>& socket)
{
_sockets.push_back(socket);
}
void ScriptEngine::UpdateSockets()
{
// Use simple for i loop as Update calls can modify the list
for (size_t i = 0; i < _sockets.size(); i++)
{
_sockets[i]->Update();
if (_sockets[i]->IsDisposed())
{
_sockets.erase(_sockets.begin() + i);
i--;
}
}
}
void ScriptEngine::RemoveSockets(const std::shared_ptr<Plugin>& plugin)
{
for (auto it = _sockets.begin(); it != _sockets.end();)
{
if ((*it)->GetPlugin() == plugin)
{
(*it)->Dispose();
it = _sockets.erase(it);
}
else
{
it++;
}
}
}
std::string OpenRCT2::Scripting::Stringify(const DukValue& val)
{
return ExpressionStringifier::StringifyExpression(val);