diff options
| author | TheMas3212 <mas3212@gmail.com> | 2023-09-24 20:55:02 +1000 |
|---|---|---|
| committer | TheMas3212 <mas3212@gmail.com> | 2023-09-24 20:55:02 +1000 |
| commit | 5353b04933c818c1f93a1058b3c1220b47a58541 (patch) | |
| tree | 7b246f334fef4eb5aefb6cb5102ff298bee9fc79 | |
| parent | 3f7c96f26d2613aa522ff3a0c7dcf877677c1e97 (diff) | |
| download | tasd-js-5353b04933c818c1f93a1058b3c1220b47a58541.tar.gz tasd-js-5353b04933c818c1f93a1058b3c1220b47a58541.zip | |
Finish General Packets
| -rw-r--r-- | src/packets/general.ts | 89 | ||||
| -rw-r--r-- | src/packets/index.ts | 48 |
2 files changed, 114 insertions, 23 deletions
diff --git a/src/packets/general.ts b/src/packets/general.ts index 0c7d63a..7e0cb1f 100644 --- a/src/packets/general.ts +++ b/src/packets/general.ts @@ -354,6 +354,69 @@ export class VerifiedPacket implements TASDPacket { } } +export class MemoryInitPacket implements TASDPacket { + constructor( + public datatype: number, + public device: number, + public required: boolean, + public name: string, + public data: Uint8Array + ) {} + get key() { + return PACKET_TYPES.MEMORY_INIT; + } + get size() { + return 5 + this.name.length + this.data.length; + } + static fromBuffer(buffer: Uint8Array) { + const datatype = readUint8(buffer, 0); + const device = readUint16(buffer, 1); + const required = readBoolean(buffer, 3); + const nlen = readUint8(buffer, 4); + let index = 5; + const name = readString(buffer, index, nlen); + index += nlen; + const data = buffer.subarray(index); + return new this(datatype, device, required, name, data); + } + toBuffer(g_keylen: number): Uint8Array { + const payload = new Uint8Array(this.size); + writeUint8(this.datatype, payload, 0); + writeUint16(this.device, payload, 1); + writeBoolean(this.required, payload, 3); + writeUint8(this.name.length, payload, 4); + writeString(this.name, payload, 5); + payload.set(this.data, 5+this.name.length); + return buildBuffer(g_keylen, this.key, payload); + } + toString() { + return `MemoryInit ${this.datatype}, ${this.device}, ${this.required}, ${this.name}, ${this.data.length}`; + } +} + +export class GameIdentiferPacket implements TASDPacket { + constructor(public type: number, public base: number, public identifier: Uint8Array) {} + get key() { + return PACKET_TYPES.GAME_IDENTIFIER; + } + get size() { + return 2 + this.identifier.length; + } + static fromBuffer(buffer: Uint8Array) { + return new this(readUint8(buffer, 0), readUint8(buffer, 1), buffer.subarray(2)); + } + toBuffer(g_keylen: number): Uint8Array { + const payload = new Uint8Array(this.size); + writeUint8(this.type, payload, 0); + writeUint8(this.base, payload, 1); + payload.set(this.identifier, 2); + return buildBuffer(g_keylen, this.key, payload); + } + toString(): string { + return `GameIdentifier ${this.type}, ${this.base}, ${this.identifier}`; + } +} + export class MovieLicensePacket implements TASDPacket { constructor(public link: string) {} get key() { @@ -374,6 +437,32 @@ export class MovieLicensePacket implements TASDPacket { } } +export class MovieFilePacket implements TASDPacket { + constructor(public name: string, public data: Uint8Array) {} + get key() { + return PACKET_TYPES.MOVIE_FILE; + } + get size() { + return 1 + this.name.length + this.data.length; + } + static fromBuffer(buffer: Uint8Array) { + const nlen = readUint8(buffer, 0); + const name = readString(buffer, 1, nlen); + const data = buffer.subarray(nlen+1); + return new this(name, data); + } + toBuffer(g_keylen: number): Uint8Array { + const payload = new Uint8Array(this.size); + writeUint8(this.name.length, payload, 0); + writeString(this.name, payload, 1); + payload.set(this.data, 1 + this.name.length); + return buildBuffer(g_keylen, this.key, payload); + } + toString(): string { + return `MovieFile ${this.name}, ${this.data.length}`; + } +} + export class PortControllerPacket implements TASDPacket { constructor(public port: number, public type: number) {} get key() { diff --git a/src/packets/index.ts b/src/packets/index.ts index 0bf2195..08ceb79 100644 --- a/src/packets/index.ts +++ b/src/packets/index.ts @@ -2,34 +2,36 @@ import { PACKET_TYPES } from "../constants"; import { AttributionPacket, BlankFramesPacket, CategoryPacket, ConsoleRegionPacket, ConsoleTypePacket, DumpCreatedPacket, DumpLastModifiedPacket, EmulatorCorePacket, EmulatorNamePacket, EmulatorVersionPacket, GameTitlePacket, MovieLicensePacket, PortControllerPacket, ROMNamePacket, RerecordsPacket, SourceLinkPacket, TASLastModifedPacket, TotalFramesPacket, VerifiedPacket } from "./general"; import { InputChunkPacket } from "./input"; import { TASDPacket, UnknownPacket } from "./utils"; +import * as general from "./general"; +import * as input from "./input"; export * as General from './general'; export * as Input from './input'; export function parse(type: number, buffer: Uint8Array): TASDPacket { switch (type) { // General - case PACKET_TYPES.CONSOLE_TYPE: return ConsoleTypePacket.fromBuffer(buffer); - case PACKET_TYPES.CONSOLE_REGION: return ConsoleRegionPacket.fromBuffer(buffer); - case PACKET_TYPES.GAME_TITLE: return GameTitlePacket.fromBuffer(buffer); - case PACKET_TYPES.ROM_NAME: return ROMNamePacket.fromBuffer(buffer); - case PACKET_TYPES.ATTRIBUTION: return AttributionPacket.fromBuffer(buffer); - case PACKET_TYPES.CATEGORY: return CategoryPacket.fromBuffer(buffer); - case PACKET_TYPES.EMULATOR_NAME: return EmulatorNamePacket.fromBuffer(buffer); - case PACKET_TYPES.EMULATOR_VERSION: return EmulatorVersionPacket.fromBuffer(buffer); - case PACKET_TYPES.EMULATOR_CORE: return EmulatorCorePacket.fromBuffer(buffer); - case PACKET_TYPES.TAS_LAST_MODIFIED: return TASLastModifedPacket.fromBuffer(buffer); - case PACKET_TYPES.DUMP_CREATED: return DumpCreatedPacket.fromBuffer(buffer); - case PACKET_TYPES.DUMP_LAST_MODIFIED: return DumpLastModifiedPacket.fromBuffer(buffer); - case PACKET_TYPES.TOTAL_FRAMES: return TotalFramesPacket.fromBuffer(buffer); - case PACKET_TYPES.RERECORDS: return RerecordsPacket.fromBuffer(buffer); - case PACKET_TYPES.SOURCE_LINK: return SourceLinkPacket.fromBuffer(buffer); - case PACKET_TYPES.BLANK_FRAMES: return BlankFramesPacket.fromBuffer(buffer); - case PACKET_TYPES.VERIFIED: return VerifiedPacket.fromBuffer(buffer); - // case PACKET_TYPES.MEMORY_INIT: return XXXXX.fromBuffer(buffer); - // case PACKET_TYPES.GAME_IDENTIFIER: return XXXXX.fromBuffer(buffer); - case PACKET_TYPES.MOVIE_LICENSE: return MovieLicensePacket.fromBuffer(buffer); - // case PACKET_TYPES.MOVIE_FILE: return XXXXX.fromBuffer(buffer); - case PACKET_TYPES.PORT_CONTROLLER: return PortControllerPacket.fromBuffer(buffer); + case PACKET_TYPES.CONSOLE_TYPE: return general.ConsoleTypePacket.fromBuffer(buffer); + case PACKET_TYPES.CONSOLE_REGION: return general.ConsoleRegionPacket.fromBuffer(buffer); + case PACKET_TYPES.GAME_TITLE: return general.GameTitlePacket.fromBuffer(buffer); + case PACKET_TYPES.ROM_NAME: return general.ROMNamePacket.fromBuffer(buffer); + case PACKET_TYPES.ATTRIBUTION: return general.AttributionPacket.fromBuffer(buffer); + case PACKET_TYPES.CATEGORY: return general.CategoryPacket.fromBuffer(buffer); + case PACKET_TYPES.EMULATOR_NAME: return general.EmulatorNamePacket.fromBuffer(buffer); + case PACKET_TYPES.EMULATOR_VERSION: return general.EmulatorVersionPacket.fromBuffer(buffer); + case PACKET_TYPES.EMULATOR_CORE: return general.EmulatorCorePacket.fromBuffer(buffer); + case PACKET_TYPES.TAS_LAST_MODIFIED: return general.TASLastModifedPacket.fromBuffer(buffer); + case PACKET_TYPES.DUMP_CREATED: return general.DumpCreatedPacket.fromBuffer(buffer); + case PACKET_TYPES.DUMP_LAST_MODIFIED: return general.DumpLastModifiedPacket.fromBuffer(buffer); + case PACKET_TYPES.TOTAL_FRAMES: return general.TotalFramesPacket.fromBuffer(buffer); + case PACKET_TYPES.RERECORDS: return general.RerecordsPacket.fromBuffer(buffer); + case PACKET_TYPES.SOURCE_LINK: return general.SourceLinkPacket.fromBuffer(buffer); + case PACKET_TYPES.BLANK_FRAMES: return general.BlankFramesPacket.fromBuffer(buffer); + case PACKET_TYPES.VERIFIED: return general.VerifiedPacket.fromBuffer(buffer); + case PACKET_TYPES.MEMORY_INIT: return general.MemoryInitPacket.fromBuffer(buffer); + case PACKET_TYPES.GAME_IDENTIFIER: return general.GameIdentiferPacket.fromBuffer(buffer); + case PACKET_TYPES.MOVIE_LICENSE: return general.MovieLicensePacket.fromBuffer(buffer); + case PACKET_TYPES.MOVIE_FILE: return general.MovieFilePacket.fromBuffer(buffer); + case PACKET_TYPES.PORT_CONTROLLER: return general.PortControllerPacket.fromBuffer(buffer); // NES // case PACKET_TYPES.NES_LATCH_FILTER: return XXXXX.fromBuffer(buffer); // case PACKET_TYPES.NES_CLOCK_FILTER: return XXXXX.fromBuffer(buffer); @@ -43,7 +45,7 @@ export function parse(type: number, buffer: Uint8Array): TASDPacket { // Genesis // case PACKET_TYPES.GENESIS_GAME_GENIE_CODE: return XXXXX.fromBuffer(buffer); // Input - case PACKET_TYPES.INPUT_CHUNK: return InputChunkPacket.fromBuffer(buffer); + case PACKET_TYPES.INPUT_CHUNK: return input.InputChunkPacket.fromBuffer(buffer); // case PACKET_TYPES.INPUT_MOMENT: return XXXXX.fromBuffer(buffer); // case PACKET_TYPES.TRANSITION: return XXXXX.fromBuffer(buffer); // case PACKET_TYPES.LAG_FRAME_CHUNK: return XXXXX.fromBuffer(buffer); |
