MCPcopy
hub / github.com/yume-chan/ya-webadb / AckClipboardHandler

Class AckClipboardHandler

libraries/scrcpy/src/1_21/impl/set-clipboard.ts:27–77  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

25>;
26
27export class AckClipboardHandler implements ScrcpyDeviceMessageParser {
28 #resolvers = new Map<bigint, PromiseResolver<void>>();
29
30 #closed = false;
31
32 readonly id = 1;
33
34 async parse(_id: number, stream: AsyncExactReadable): Promise<undefined> {
35 const message = await AckClipboardDeviceMessage.deserialize(stream);
36 const resolver = this.#resolvers.get(message.sequence);
37 if (resolver) {
38 resolver.resolve();
39 this.#resolvers.delete(message.sequence);
40 }
41 }
42
43 close(): void {
44 for (const resolver of this.#resolvers.values()) {
45 resolver.reject();
46 }
47 this.#resolvers.clear();
48 this.#closed = true;
49 }
50
51 error(e?: unknown): void {
52 for (const resolver of this.#resolvers.values()) {
53 resolver.reject(e);
54 }
55 this.#resolvers.clear();
56 this.#closed = true;
57 }
58
59 serializeSetClipboardControlMessage(
60 message: ScrcpySetClipboardControlMessage,
61 ): Uint8Array | [Uint8Array, Promise<void>] {
62 if (message.sequence === 0n) {
63 return SetClipboardControlMessage.serialize(message);
64 }
65
66 if (this.#closed) {
67 throw new Error();
68 }
69
70 const resolver = new PromiseResolver<void>();
71 this.#resolvers.set(message.sequence, resolver);
72 return [
73 SetClipboardControlMessage.serialize(message),
74 resolver.promise,
75 ];
76 }
77}

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected