feat: F4.7 the data exchange window, measured against Java's
One row per frame (its highest layer's), Java's detail tree, the table as Java's text file, "Tabellen löschen" for every card (clearCapture in the room), a tab per card with Java's title, Java's layer colours as tokens, the chosen frame and autoscroll per tab. New oracle ExchangeWindowRun. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -21,7 +21,7 @@ export type AppKind = (typeof APP_KINDS)[number];
|
||||
*/
|
||||
export type Topic = 'activity' | 'dropped' | `trace:${string}` | `app:${string}/${AppKind}` | `node:${string}`;
|
||||
|
||||
export const CLIENT_MESSAGE_KINDS = ['sub', 'unsub', 'start', 'stop', 'speed', 'drop', 'input'] as const;
|
||||
export const CLIENT_MESSAGE_KINDS = ['sub', 'unsub', 'start', 'stop', 'speed', 'drop', 'clearCapture', 'input'] as const;
|
||||
export type ClientMessageKind = (typeof CLIENT_MESSAGE_KINDS)[number];
|
||||
|
||||
export type ClientMessage =
|
||||
@@ -39,6 +39,8 @@ export type ClientMessage =
|
||||
| { readonly v: 1; readonly kind: 'speed'; readonly value: number }
|
||||
/** Java's "Pakete verwerfen" pressed (on) or let go: every cable drops what it carries while any client holds it. */
|
||||
| { readonly v: 1; readonly kind: 'drop'; readonly on: boolean }
|
||||
/** Java's "Tabellen löschen" in the data exchange window: every card's capture and the dropped frames are emptied, the numbers begin anew. */
|
||||
| { readonly v: 1; readonly kind: 'clearCapture' }
|
||||
/** An action in a program's window, answered by `ack` or `error` with the same reqId. */
|
||||
| {
|
||||
readonly v: 1;
|
||||
@@ -153,6 +155,8 @@ export function parseClientMessage(value: unknown): Parsed<ClientMessage> {
|
||||
return { message: { v: 1, kind: 'start', language: value.language } };
|
||||
case 'stop':
|
||||
return { message: { v: 1, kind: 'stop' } };
|
||||
case 'clearCapture':
|
||||
return { message: { v: 1, kind: 'clearCapture' } };
|
||||
case 'speed':
|
||||
if (typeof value.value !== 'number' || !Number.isFinite(value.value)) return bad('badMessage', 'speed is no number');
|
||||
return { message: { v: 1, kind: 'speed', value: value.value } };
|
||||
|
||||
Reference in New Issue
Block a user