diff --git a/arkoala/arkui/src/peer_events_checker.ts b/arkoala/arkui/src/peer_events_checker.ts index 3131e6554357f85c7da430a3a36a8f621537d9cc..803e0bbb57fa22894c9f9fd7e990016414134d7c 100644 --- a/arkoala/arkui/src/peer_events_checker.ts +++ b/arkoala/arkui/src/peer_events_checker.ts @@ -1,27 +1,40 @@ -import { GeneratedPartialPropertiesType, PeerNode, nativeModule, setCustomEventsChecker } from "@koalaui/arkoala"; -import { PeerEventsProperties, deliverGeneratedPeerEvent, deserializePeerEvent } from "./peer_events"; -import { Deserializer } from "./peers/Deserializer"; -import { DataNode } from "@koalaui/runtime"; +import { ResourceHolder } from "@koalaui/interop" +import { nativeModule } from "@koalaui/arkoala" +import { Deserializer } from "./peers/Deserializer" +import { deserializeAndCallCallback } from "./peers/CallbackDeserializeCall" -const bufferSize = 512 +enum CallbackEventKind { + Event_CallCallback = 0, + Event_HoldManagedResource = 1, + Event_ReleaseManagedResource = 2, +} + +const bufferSize = 1024 const buffer = new Uint8Array(bufferSize) -const deserializer = new Deserializer(buffer.buffer, bufferSize) -function checkGeneratedEvents() { +const deserializer = new Deserializer(buffer.buffer as ArrayBuffer, bufferSize) +export function checkArkoalaCallbacks() { while (true) { - let result = nativeModule()._CheckArkoalaGeneratedEvents(buffer, bufferSize) + let result = nativeModule()._CheckArkoalaCallbackEvent(buffer, bufferSize) if (result == 0) break deserializer.resetCurrentPosition() - const event = deserializePeerEvent(deserializer) - const node = PeerNode.findPeerByNativeId(event.nodeId); - if (node) { - for (let child = node.firstChild; child; child = child.nextSibling) { - const properties = DataNode.extract>(GeneratedPartialPropertiesType, child) - if (properties) - deliverGeneratedPeerEvent(event, properties) + const eventKind = deserializer.readInt32() as CallbackEventKind + switch (eventKind) { + case CallbackEventKind.Event_CallCallback: { + deserializeAndCallCallback(deserializer) + break; + } + case CallbackEventKind.Event_HoldManagedResource: { + const resourceId = deserializer.readInt32() + ResourceHolder.instance().hold(resourceId) + break; } + case CallbackEventKind.Event_ReleaseManagedResource: { + const resourceId = deserializer.readInt32() + ResourceHolder.instance().release(resourceId) + break; + } + default: throw new Error(`Unknown callback event kind ${eventKind}`) } } } - -setCustomEventsChecker(checkGeneratedEvents) \ No newline at end of file