From 6270ad37fc06be8cbafcee34cebf8331229d435e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=90=E6=B2=90=E5=91=80?= <163636894+zimuya4153@users.noreply.github.com> Date: Sat, 12 Oct 2024 16:36:13 +0800 Subject: [PATCH] feat: Simplify the BinaryStream API --- src/BinaryStreamApi.cpp | 49 +++++++++++++++++------------------------ 1 file changed, 20 insertions(+), 29 deletions(-) diff --git a/src/BinaryStreamApi.cpp b/src/BinaryStreamApi.cpp index e588841..7eb6e95 100644 --- a/src/BinaryStreamApi.cpp +++ b/src/BinaryStreamApi.cpp @@ -25,10 +25,11 @@ public: } }; +#define BinaryStreamManager LegacyScriptBinaryStreamManager::getInstance() #define EXPORTAPI(funcName, type, fuc) \ - RemoteCall::exportAs("GMLIB_BinaryStream_API", funcName, [](uint64 BinaryStreamId, type value) -> void { \ - auto binaryStream = LegacyScriptBinaryStreamManager::getInstance().getBinaryStream(BinaryStreamId); \ - if (binaryStream != nullptr) fuc; \ + RemoteCall::exportAs("GMLIB_BinaryStream_API", funcName, [](uint64 id, type value) -> void { \ + auto bs = BinaryStreamManager.getBinaryStream(id); \ + if (bs != nullptr) fuc; \ }) template @@ -37,39 +38,29 @@ template struct Info { using ArgT = A; }; -#define EXPORTAPI2(T) EXPORTAPI(#T, Info::ArgT, binaryStream->T(value)) +#define EXPORTAPI2(T) EXPORTAPI(#T, Info::ArgT, bs->T(value)) void Export_BinaryStream_API() { RemoteCall::exportAs("GMLIB_BinaryStream_API", "create", []() -> uint64 { - auto id = LegacyScriptBinaryStreamManager::getInstance().getNextId(); - LegacyScriptBinaryStreamManager::getInstance().cretateBinaryStream(id); + auto id = BinaryStreamManager.getNextId(); + BinaryStreamManager.cretateBinaryStream(id); return id; }); - RemoteCall::exportAs("GMLIB_BinaryStream_API", "reset", [](uint64 BinaryStreamId) -> void { - if (LegacyScriptBinaryStreamManager::getInstance().getBinaryStream(BinaryStreamId) == nullptr) - LegacyScriptBinaryStreamManager::getInstance().cretateBinaryStream(BinaryStreamId); - LegacyScriptBinaryStreamManager::getInstance().getBinaryStream(BinaryStreamId)->reset(); + RemoteCall::exportAs("GMLIB_BinaryStream_API", "reset", [](uint64 id) -> void { + if (BinaryStreamManager.getBinaryStream(id) == nullptr) BinaryStreamManager.cretateBinaryStream(id); + else BinaryStreamManager.getBinaryStream(id)->reset(); }); - RemoteCall::exportAs( - "GMLIB_BinaryStream_API", - "sendTo", - [](uint64 BinaryStreamId, Player* player) -> void { - auto binaryStream = LegacyScriptBinaryStreamManager::getInstance().getBinaryStream(BinaryStreamId); - if (binaryStream != nullptr) binaryStream->sendTo(*player); - } - ); - RemoteCall::exportAs("GMLIB_BinaryStream_API", "destroy", [](uint64 BinaryStreamId) -> void { - LegacyScriptBinaryStreamManager::getInstance().removeBinaryStream(BinaryStreamId); + RemoteCall::exportAs("GMLIB_BinaryStream_API", "sendTo", [](uint64 id, Player* player) -> void { + if (auto bs = BinaryStreamManager.getBinaryStream(id); bs != nullptr) bs->sendTo(*player); }); - EXPORTAPI("writePacketHeader", int, binaryStream->writePacketHeader((MinecraftPacketIds)value)); - EXPORTAPI("writeUuid", std::string const&, binaryStream->writeUuid(mce::UUID::fromString(value))); - EXPORTAPI( - "writeItem", - ItemStack*, - binaryStream->writeType(NetworkItemStackDescriptor(*value)) - ); - EXPORTAPI("writeString", std::string const&, binaryStream->writeString(value)); - EXPORTAPI("writeCompoundTag", CompoundTag*, binaryStream->writeCompoundTag(*value)); + RemoteCall::exportAs("GMLIB_BinaryStream_API", "destroy", [](uint64 id) -> void { + BinaryStreamManager.removeBinaryStream(id); + }); + EXPORTAPI("writePacketHeader", int, bs->writePacketHeader((MinecraftPacketIds)value)); + EXPORTAPI("writeUuid", std::string const&, bs->writeUuid(mce::UUID::fromString(value))); + EXPORTAPI("writeItem", ItemStack*, bs->writeType(NetworkItemStackDescriptor(*value))); + EXPORTAPI("writeString", std::string const&, bs->writeString(value)); + EXPORTAPI("writeCompoundTag", CompoundTag*, bs->writeCompoundTag(*value)); EXPORTAPI2(writeBool); EXPORTAPI2(writeByte); EXPORTAPI2(writeDouble);