feat: Simplify the BinaryStream API

This commit is contained in:
子沐呀
2024-10-12 16:36:13 +08:00
Unverified
parent f0ac6d4c41
commit 6270ad37fc
+20 -29
View File
@@ -25,10 +25,11 @@ public:
} }
}; };
#define BinaryStreamManager LegacyScriptBinaryStreamManager::getInstance()
#define EXPORTAPI(funcName, type, fuc) \ #define EXPORTAPI(funcName, type, fuc) \
RemoteCall::exportAs("GMLIB_BinaryStream_API", funcName, [](uint64 BinaryStreamId, type value) -> void { \ RemoteCall::exportAs("GMLIB_BinaryStream_API", funcName, [](uint64 id, type value) -> void { \
auto binaryStream = LegacyScriptBinaryStreamManager::getInstance().getBinaryStream(BinaryStreamId); \ auto bs = BinaryStreamManager.getBinaryStream(id); \
if (binaryStream != nullptr) fuc; \ if (bs != nullptr) fuc; \
}) })
template <typename T> template <typename T>
@@ -37,39 +38,29 @@ template <typename T, typename R, typename A, typename... AS>
struct Info<R (T::*)(A, AS...)> { struct Info<R (T::*)(A, AS...)> {
using ArgT = A; using ArgT = A;
}; };
#define EXPORTAPI2(T) EXPORTAPI(#T, Info<decltype(&GMLIB_BinaryStream::T)>::ArgT, binaryStream->T(value)) #define EXPORTAPI2(T) EXPORTAPI(#T, Info<decltype(&GMLIB_BinaryStream::T)>::ArgT, bs->T(value))
void Export_BinaryStream_API() { void Export_BinaryStream_API() {
RemoteCall::exportAs("GMLIB_BinaryStream_API", "create", []() -> uint64 { RemoteCall::exportAs("GMLIB_BinaryStream_API", "create", []() -> uint64 {
auto id = LegacyScriptBinaryStreamManager::getInstance().getNextId(); auto id = BinaryStreamManager.getNextId();
LegacyScriptBinaryStreamManager::getInstance().cretateBinaryStream(id); BinaryStreamManager.cretateBinaryStream(id);
return id; return id;
}); });
RemoteCall::exportAs("GMLIB_BinaryStream_API", "reset", [](uint64 BinaryStreamId) -> void { RemoteCall::exportAs("GMLIB_BinaryStream_API", "reset", [](uint64 id) -> void {
if (LegacyScriptBinaryStreamManager::getInstance().getBinaryStream(BinaryStreamId) == nullptr) if (BinaryStreamManager.getBinaryStream(id) == nullptr) BinaryStreamManager.cretateBinaryStream(id);
LegacyScriptBinaryStreamManager::getInstance().cretateBinaryStream(BinaryStreamId); else BinaryStreamManager.getBinaryStream(id)->reset();
LegacyScriptBinaryStreamManager::getInstance().getBinaryStream(BinaryStreamId)->reset();
}); });
RemoteCall::exportAs( RemoteCall::exportAs("GMLIB_BinaryStream_API", "sendTo", [](uint64 id, Player* player) -> void {
"GMLIB_BinaryStream_API", if (auto bs = BinaryStreamManager.getBinaryStream(id); bs != nullptr) bs->sendTo(*player);
"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);
}); });
EXPORTAPI("writePacketHeader", int, binaryStream->writePacketHeader((MinecraftPacketIds)value)); RemoteCall::exportAs("GMLIB_BinaryStream_API", "destroy", [](uint64 id) -> void {
EXPORTAPI("writeUuid", std::string const&, binaryStream->writeUuid(mce::UUID::fromString(value))); BinaryStreamManager.removeBinaryStream(id);
EXPORTAPI( });
"writeItem", EXPORTAPI("writePacketHeader", int, bs->writePacketHeader((MinecraftPacketIds)value));
ItemStack*, EXPORTAPI("writeUuid", std::string const&, bs->writeUuid(mce::UUID::fromString(value)));
binaryStream->writeType<NetworkItemStackDescriptor>(NetworkItemStackDescriptor(*value)) EXPORTAPI("writeItem", ItemStack*, bs->writeType(NetworkItemStackDescriptor(*value)));
); EXPORTAPI("writeString", std::string const&, bs->writeString(value));
EXPORTAPI("writeString", std::string const&, binaryStream->writeString(value)); EXPORTAPI("writeCompoundTag", CompoundTag*, bs->writeCompoundTag(*value));
EXPORTAPI("writeCompoundTag", CompoundTag*, binaryStream->writeCompoundTag(*value));
EXPORTAPI2(writeBool); EXPORTAPI2(writeBool);
EXPORTAPI2(writeByte); EXPORTAPI2(writeByte);
EXPORTAPI2(writeDouble); EXPORTAPI2(writeDouble);