UNPKG

@yume-chan/scrcpy

Version:
54 lines 1.7 kB
import { PromiseResolver } from "@yume-chan/async"; import { string, struct, u32, u64, u8 } from "@yume-chan/struct"; export const AckClipboardDeviceMessage = struct({ sequence: u64 }, { littleEndian: false }); export const SetClipboardControlMessage = struct({ type: u8, sequence: u64, paste: u8(), content: string(u32), }, { littleEndian: false }); export class AckClipboardHandler { #resolvers = new Map(); #closed = false; async parse(id, stream) { if (id !== 1) { return false; } const message = await AckClipboardDeviceMessage.deserialize(stream); const resolver = this.#resolvers.get(message.sequence); if (resolver) { resolver.resolve(); this.#resolvers.delete(message.sequence); } return true; } close() { for (const resolver of this.#resolvers.values()) { resolver.reject(); } this.#resolvers.clear(); this.#closed = true; } error(e) { for (const resolver of this.#resolvers.values()) { resolver.reject(e); } this.#resolvers.clear(); this.#closed = true; } serializeSetClipboardControlMessage(message) { if (message.sequence === 0n) { return SetClipboardControlMessage.serialize(message); } if (this.#closed) { throw new Error(); } const resolver = new PromiseResolver(); this.#resolvers.set(message.sequence, resolver); return [ SetClipboardControlMessage.serialize(message), resolver.promise, ]; } } //# sourceMappingURL=set-clipboard.js.map