From df294d817d705d952a9884641d26a141de22ad16 Mon Sep 17 00:00:00 2001 From: dong <58670809@qq.com> Date: Wed, 26 Jul 2023 17:47:08 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=BA=94=E7=AD=94=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/draw-app/DrawProperties.vue | 5 + .../properties/TransponderProperty.vue | 79 ++++++++ .../graphics/TransponderInteraction.ts | 55 ++++++ src/drawApp/index.ts | 14 ++ src/graphics/transponder/Transponder.ts | 164 +++++++++++++++ .../transponder/TransponderDrawAssistant.ts | 187 ++++++++++++++++++ src/protos/stationLayoutGraphics.ts | 164 ++++++++++++++- 7 files changed, 667 insertions(+), 1 deletion(-) create mode 100644 src/components/draw-app/properties/TransponderProperty.vue create mode 100644 src/drawApp/graphics/TransponderInteraction.ts create mode 100644 src/graphics/transponder/Transponder.ts create mode 100644 src/graphics/transponder/TransponderDrawAssistant.ts diff --git a/src/components/draw-app/DrawProperties.vue b/src/components/draw-app/DrawProperties.vue index 7101d9b..90c0d7c 100644 --- a/src/components/draw-app/DrawProperties.vue +++ b/src/components/draw-app/DrawProperties.vue @@ -81,6 +81,9 @@ + @@ -113,6 +116,7 @@ import SignalProperty from './properties/SignalProperty.vue'; import TurnoutProperty from './properties/TurnoutProperty.vue'; import SectionProperty from './properties/SectionProperty.vue'; import SeparatorProperty from './properties/SeparatorProperty.vue'; +import TransponderProperty from './properties/TransponderProperty.vue'; import SectionLinkProperty from './properties/SectionLinkProperty.vue'; import { Platform } from 'src/graphics/platform/Platform'; import { Station } from 'src/graphics/station/Station'; @@ -126,6 +130,7 @@ import { AxleCounting } from 'src/graphics/axleCounting/AxleCounting'; import { AxleCountingSection } from 'src/graphics/axleCountingSection/AxleCountingSection'; import { LogicSection } from 'src/graphics/logicSection/LogicSection'; import { Separator } from 'src/graphics/separator/Separator'; +import { Transponder } from 'src/graphics/transponder/Transponder'; import { SectionLink } from 'src/graphics/sectionLink/SectionLink'; import StopPositionProperty from './properties/StopPositionProperty.vue'; import { StopPosition } from 'src/graphics/stopPosition/StopPosition'; diff --git a/src/components/draw-app/properties/TransponderProperty.vue b/src/components/draw-app/properties/TransponderProperty.vue new file mode 100644 index 0000000..98ee3dd --- /dev/null +++ b/src/components/draw-app/properties/TransponderProperty.vue @@ -0,0 +1,79 @@ + + + diff --git a/src/drawApp/graphics/TransponderInteraction.ts b/src/drawApp/graphics/TransponderInteraction.ts new file mode 100644 index 0000000..6a7763b --- /dev/null +++ b/src/drawApp/graphics/TransponderInteraction.ts @@ -0,0 +1,55 @@ +import * as pb_1 from 'google-protobuf'; +import { + ITransponderData, + Transponder, +} from 'src/graphics/transponder/Transponder'; +import { graphicData } from 'src/protos/stationLayoutGraphics'; +import { GraphicDataBase } from './GraphicDataBase'; + +export class TransponderData + extends GraphicDataBase + implements ITransponderData +{ + constructor(data?: graphicData.Transponder) { + let transponder; + if (!data) { + transponder = new graphicData.Transponder({ + common: GraphicDataBase.defaultCommonInfo(Transponder.Type), + }); + } else { + transponder = data; + } + super(transponder); + } + + public get data(): graphicData.Transponder { + return this.getData(); + } + get code(): string { + return this.data.code; + } + set code(v: string) { + this.data.code = v; + } + get transponderType(): number { + return this.data.transponderType; + } + set transponderType(v: number) { + this.data.transponderType = v; + } + get index(): number { + return this.data.index; + } + set index(v: number) { + this.data.index = v; + } + clone(): TransponderData { + return new TransponderData(this.data.cloneMessage()); + } + copyFrom(data: TransponderData): void { + pb_1.Message.copyInto(data.data, this.data); + } + eq(other: TransponderData): boolean { + return pb_1.Message.equals(this.data, other.data); + } +} diff --git a/src/drawApp/index.ts b/src/drawApp/index.ts index bf7a2f2..324a997 100644 --- a/src/drawApp/index.ts +++ b/src/drawApp/index.ts @@ -99,6 +99,12 @@ import { Notify, Dialog } from 'quasar'; import { checkMapData } from 'src/api/Simulation'; import { SpksSwitchDraw } from 'src/graphics/spksSwitch/SpksSwitchDrawAssistant'; import { GatedBoxDraw } from 'src/graphics/gatedBox/GatedBoxDrawAssistant'; +import { TransponderDraw } from 'src/graphics/transponder/TransponderDrawAssistant'; +import { + Transponder, + TransponderTemplate, +} from 'src/graphics/transponder/Transponder'; +import { TransponderData } from './graphics/TransponderInteraction'; // export function fromStoragePoint(p: graphicData.Point): Point { // return new Point(p.x, p.y); @@ -234,6 +240,7 @@ export function initDrawApp(dom: HTMLElement): JlDrawApp { | StopPositionDraw | SpksSwitchDraw | GatedBoxDraw + | TransponderDraw )[] = []; if (draftType === 'Line') { drawAssistants = [ @@ -271,6 +278,7 @@ export function initDrawApp(dom: HTMLElement): JlDrawApp { app, new LogicSectionTemplate(new LogicSectionData()) ), + new TransponderDraw(app, new TransponderTemplate(new TransponderData())), new StopPositionDraw( app, new StopPositionTemplate(new StopPositionData()) @@ -482,6 +490,9 @@ export function saveDrawDatas(app: JlDrawApp) { } else if (GatedBox.Type === g.type) { const gatedBoxData = (g as GatedBox).saveData(); storage.gateBoxs.push((gatedBoxData as GatedBoxData).data); + } else if (Transponder.Type === g.type) { + const transponderData = (g as Transponder).saveData(); + storage.transponders.push((transponderData as TransponderData).data); } }); const base64 = fromUint8Array(storage.serialize()); @@ -559,6 +570,9 @@ export async function loadDrawDatas(app: GraphicApp) { storage.gateBoxs.forEach((gatedBox) => { datas.push(new GatedBoxData(gatedBox)); }); + storage.transponders.forEach((transponder) => { + datas.push(new TransponderData(transponder)); + }); await app.loadGraphic(datas); } else { app.loadGraphic([]); diff --git a/src/graphics/transponder/Transponder.ts b/src/graphics/transponder/Transponder.ts new file mode 100644 index 0000000..57d54dc --- /dev/null +++ b/src/graphics/transponder/Transponder.ts @@ -0,0 +1,164 @@ +import { Container, Graphics } from 'pixi.js'; +import { + GraphicData, + JlGraphic, + JlGraphicTemplate, + VectorText, +} from 'src/jl-graphic'; + +export interface ITransponderData extends GraphicData { + get code(): string; // 编号 + set code(v: string); + get transponderType(): number; // 类型 + set transponderType(v: number); + get index(): number; // 索引 + set index(v: number); + clone(): ITransponderData; + copyFrom(data: ITransponderData): void; + eq(other: ITransponderData): boolean; +} + +export enum transponderTypeEnum { + FB, // 固定应答器 + WB, // 轮径校正应答器 + DB, // 休眠唤醒应答器 +} + +export const TransponderConsts = { + height: 12, + lineWidth: 2, + lineColor: '0xFFFFFF', + wblineColor: '0xFF0000', + textFontSize: 12, + textMarginY: 5, // 名称与应答器的距离 +}; +export const transponderTypePoints = { + [transponderTypeEnum[transponderTypeEnum.FB]]: [ + [-TransponderConsts.height / 2, -TransponderConsts.height / 2], + [TransponderConsts.height / 2, -TransponderConsts.height / 2], + [TransponderConsts.height / 2, TransponderConsts.height / 2], + [-TransponderConsts.height / 2, TransponderConsts.height / 2], + [ + -TransponderConsts.height / 2, + -TransponderConsts.height / 2 - TransponderConsts.lineWidth / 2, + ], + [-TransponderConsts.height / 2, -TransponderConsts.height / 2], + [TransponderConsts.height / 2, TransponderConsts.height / 2], + [TransponderConsts.height / 2, -TransponderConsts.height / 2], + [-TransponderConsts.height / 2, TransponderConsts.height / 2], + ], + [transponderTypeEnum[transponderTypeEnum.WB]]: [ + [-TransponderConsts.height / 2, -TransponderConsts.height / 2], + [TransponderConsts.height / 2, -TransponderConsts.height / 2], + [TransponderConsts.height / 2, TransponderConsts.height / 2], + [-TransponderConsts.height / 2, TransponderConsts.height / 2], + [ + -TransponderConsts.height / 2, + -TransponderConsts.height / 2 - TransponderConsts.lineWidth / 2, + ], + [0, -TransponderConsts.height / 2], + [0, TransponderConsts.height / 2], + [TransponderConsts.height / 2, 0], + [-TransponderConsts.height / 2, 0], + ], + [transponderTypeEnum[transponderTypeEnum.DB]]: [ + [-TransponderConsts.height, -TransponderConsts.height / 2], + [TransponderConsts.height, -TransponderConsts.height / 2], + [TransponderConsts.height, TransponderConsts.height / 2], + [-TransponderConsts.height, TransponderConsts.height / 2], + [ + -TransponderConsts.height, + -TransponderConsts.height / 2 - TransponderConsts.lineWidth / 2, + ], + [-TransponderConsts.height, -TransponderConsts.height / 2], + [TransponderConsts.height, TransponderConsts.height / 2], + [TransponderConsts.height, -TransponderConsts.height / 2], + [-TransponderConsts.height, TransponderConsts.height / 2], + ], +}; + +export class TransponderCode extends Container { + codeText: VectorText = new VectorText(''); + name = 'transponderCode'; + constructor() { + super(); + this.addChild(this.codeText); + } + clear() { + this.codeText.text = ''; + } + paint(datas: ITransponderData) { + this.codeText.text = datas.code; + this.codeText.anchor.set(0.5); + } +} + +export class Transponder extends JlGraphic { + static Type = 'Transponder'; + polygonGraphic: Graphics = new Graphics(); + labelGraphic: TransponderCode = new TransponderCode(); + constructor() { + super(Transponder.Type); + this.addChild(this.polygonGraphic); + this.addChild(this.labelGraphic); + } + get datas(): ITransponderData { + return this.getDatas(); + } + clear() { + this.polygonGraphic.clear(); + this.labelGraphic.clear(); + } + doRepaint(): void { + this.clear(); + const polygonGraphic = this.polygonGraphic; + const type = transponderTypeEnum[this.datas.transponderType]; + const ps = transponderTypePoints[type]; + const lineColor = + type == 'WB' + ? TransponderConsts.wblineColor + : TransponderConsts.lineColor; + polygonGraphic.lineStyle(TransponderConsts.lineWidth, lineColor); + const indexArr = [0, 5, 7]; + ps.forEach((item, index) => { + if (indexArr.includes(index)) { + polygonGraphic.moveTo(item[0], item[1]); + } else { + polygonGraphic.lineTo(item[0], item[1]); + } + }); + this.labelGraphic.paint(this.datas); + const style = { + fill: lineColor, + fontSize: TransponderConsts.textFontSize, + }; + this.labelGraphic.codeText.style = style; + const codeTransform = this.datas?.childTransforms?.find( + (item) => item.name === 'transponderCode' + ); + if (codeTransform) { + const position = codeTransform?.transform.position; + const rotation = codeTransform?.transform?.rotation; + this.labelGraphic.position.set(position?.x, position?.y); + this.labelGraphic.rotation = rotation || 0; + } else { + const { height: polygonHeight } = this.polygonGraphic.getLocalBounds(); + const { height: textHeight } = this.labelGraphic.getLocalBounds(); + this.labelGraphic.position.set( + 0, + polygonHeight / 2 + textHeight / 2 + TransponderConsts.textMarginY + ); + } + } +} + +export class TransponderTemplate extends JlGraphicTemplate { + constructor(dataTemplate: ITransponderData) { + super(Transponder.Type, { + dataTemplate, + }); + } + new(): Transponder { + return new Transponder(); + } +} diff --git a/src/graphics/transponder/TransponderDrawAssistant.ts b/src/graphics/transponder/TransponderDrawAssistant.ts new file mode 100644 index 0000000..07ce9ab --- /dev/null +++ b/src/graphics/transponder/TransponderDrawAssistant.ts @@ -0,0 +1,187 @@ +import { DisplayObject, FederatedPointerEvent, IHitArea, Point } from 'pixi.js'; +import { + AbsorbableLine, + AbsorbablePosition, + GraphicDrawAssistant, + GraphicInteractionPlugin, + GraphicTransformEvent, + JlDrawApp, + JlGraphic, + linePoint, +} from 'src/jl-graphic'; +import { + ITransponderData, + Transponder, + TransponderConsts, + TransponderTemplate, + transponderTypeEnum, + transponderTypePoints, +} from './Transponder'; + +export class TransponderDraw extends GraphicDrawAssistant< + TransponderTemplate, + ITransponderData +> { + TransponderGraph: Transponder; + constructor(app: JlDrawApp, template: TransponderTemplate) { + super(app, template, 'border_all', '应答器Transponder'); + this.TransponderGraph = this.graphicTemplate.new(); + this.container.addChild(this.TransponderGraph); + TransponderInteraction.init(app); + } + + bind(): void { + super.bind(); + this.TransponderGraph.loadData(this.graphicTemplate.datas); + this.TransponderGraph.doRepaint(); + } + + onLeftDown(e: FederatedPointerEvent): void { + this.container.position.copyFrom(this.toCanvasCoordinates(e.global)); + this.createAndStore(true); + } + + redraw(p: Point): void { + this.container.position.copyFrom(p); + } + + prepareData(data: ITransponderData): boolean { + data.transform = this.container.saveTransform(); + return true; + } +} + +//碰撞检测 +export class TransponderGraphicHitArea implements IHitArea { + transponder: Transponder; + constructor(transponder: Transponder) { + this.transponder = transponder; + } + contains(x: number, y: number): boolean { + let contains = false; + const p = new Point(x, y); + const type = transponderTypeEnum[this.transponder.datas.transponderType]; + const ps = transponderTypePoints[type]; + const tolerance = TransponderConsts.lineWidth; + const indexArr = [0, 5, 7]; + ps.forEach((item, index) => { + if (!indexArr.includes(index)) { + const p1 = new Point(ps[index - 1][0], ps[index - 1][1]); + const p2 = new Point(item[0], item[1]); + contains = contains || linePoint(p1, p2, p, tolerance); + } + }); + return contains; + } +} + +export class TransponderInteraction extends GraphicInteractionPlugin { + static Name = 'Transponder_transform'; + constructor(app: JlDrawApp) { + super(TransponderInteraction.Name, app); + } + static init(app: JlDrawApp) { + return new TransponderInteraction(app); + } + filter(...grahpics: JlGraphic[]): Transponder[] | undefined { + return grahpics + .filter((g) => g.type === Transponder.Type) + .map((g) => g as Transponder); + } + bind(g: Transponder): void { + g.polygonGraphic.eventMode = 'static'; + g.polygonGraphic.cursor = 'pointer'; + g.polygonGraphic.scalable = true; + g.polygonGraphic.hitArea = new TransponderGraphicHitArea(g); + g.on('transformstart', this.transformstart, this); + g.labelGraphic.on('transformstart', this.codetransformstart, this); + g.labelGraphic.draggable = true; + g.labelGraphic.selectable = true; + g.labelGraphic.rotatable = true; + g.labelGraphic.transformSave = true; + g.labelGraphic.eventMode = 'static'; + } + unbind(g: Transponder): void { + g.polygonGraphic.eventMode = 'none'; + g.polygonGraphic.scalable = false; + g.polygonGraphic.rotatable = false; + g.off('transformstart', this.transformstart, this); + g.labelGraphic.off('transformstart', this.codetransformstart, this); + g.labelGraphic.draggable = false; + g.labelGraphic.selectable = false; + g.labelGraphic.rotatable = false; + g.labelGraphic.transformSave = false; + g.labelGraphic.eventMode = 'none'; + } + transformstart(e: GraphicTransformEvent) { + const target = e.target as DisplayObject; + const transponder = target.getGraphic() as Transponder; + transponder.getGraphicApp().setOptions({ + absorbablePositions: buildAbsorbablePositions(transponder), + }); + } + codetransformstart(e: GraphicTransformEvent) { + const target = e.target as DisplayObject; + const transponder = target.getGraphic() as Transponder; + transponder.getGraphicApp().setOptions({ + absorbablePositions: buildCodeAbsorbablePositions(transponder), + }); + } +} + +/** + * 构建吸附线 + * @param transponder + */ +function buildAbsorbablePositions( + transponder: Transponder +): AbsorbablePosition[] { + const aps: AbsorbablePosition[] = []; + const transponders = transponder.queryStore.queryByType( + Transponder.Type + ); + const canvas = transponder.getCanvas(); + transponders.forEach((item) => { + if (item.id === transponder.id) { + return; + } + const ala = new AbsorbableLine( + new Point(item.x, 0), + new Point(item.x, canvas.height) + ); + const alb = new AbsorbableLine( + new Point(0, item.y), + new Point(canvas.width, item.y) + ); + aps.push(ala); + aps.push(alb); + }); + return aps; +} + +/** + * 名称构建吸附线 + * @param transponder + */ +function buildCodeAbsorbablePositions( + transponder: Transponder +): AbsorbablePosition[] { + const aps: AbsorbablePosition[] = []; + const transponders = transponder.queryStore.queryByType( + Transponder.Type + ); + const canvas = transponder.getCanvas(); + transponders.forEach((item) => { + const ala = new AbsorbableLine( + new Point(item.x, 0), + new Point(item.x, canvas.height) + ); + const alb = new AbsorbableLine( + new Point(0, item.y), + new Point(canvas.width, item.y) + ); + aps.push(ala); + aps.push(alb); + }); + return aps; +} diff --git a/src/protos/stationLayoutGraphics.ts b/src/protos/stationLayoutGraphics.ts index 4c97b26..31725bf 100644 --- a/src/protos/stationLayoutGraphics.ts +++ b/src/protos/stationLayoutGraphics.ts @@ -24,9 +24,10 @@ export namespace graphicData { spksSwitchs?: SpksSwitch[]; esbButtons?: EsbButton[]; gateBoxs?: GatedBox[]; + transponders?: Transponder[]; }) { super(); - pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [4, 5, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], this.#one_of_decls); + pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [4, 5, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], this.#one_of_decls); if (!Array.isArray(data) && typeof data == "object") { if ("canvas" in data && data.canvas != undefined) { this.canvas = data.canvas; @@ -76,6 +77,9 @@ export namespace graphicData { if ("gateBoxs" in data && data.gateBoxs != undefined) { this.gateBoxs = data.gateBoxs; } + if ("transponders" in data && data.transponders != undefined) { + this.transponders = data.transponders; + } } } get canvas() { @@ -177,6 +181,12 @@ export namespace graphicData { set gateBoxs(value: GatedBox[]) { pb_1.Message.setRepeatedWrapperField(this, 21, value); } + get transponders() { + return pb_1.Message.getRepeatedWrapperField(this, Transponder, 22) as Transponder[]; + } + set transponders(value: Transponder[]) { + pb_1.Message.setRepeatedWrapperField(this, 22, value); + } static fromObject(data: { canvas?: ReturnType; Platforms?: ReturnType[]; @@ -194,6 +204,7 @@ export namespace graphicData { spksSwitchs?: ReturnType[]; esbButtons?: ReturnType[]; gateBoxs?: ReturnType[]; + transponders?: ReturnType[]; }): RtssGraphicStorage { const message = new RtssGraphicStorage({}); if (data.canvas != null) { @@ -244,6 +255,9 @@ export namespace graphicData { if (data.gateBoxs != null) { message.gateBoxs = data.gateBoxs.map(item => GatedBox.fromObject(item)); } + if (data.transponders != null) { + message.transponders = data.transponders.map(item => Transponder.fromObject(item)); + } return message; } toObject() { @@ -264,6 +278,7 @@ export namespace graphicData { spksSwitchs?: ReturnType[]; esbButtons?: ReturnType[]; gateBoxs?: ReturnType[]; + transponders?: ReturnType[]; } = {}; if (this.canvas != null) { data.canvas = this.canvas.toObject(); @@ -313,6 +328,9 @@ export namespace graphicData { if (this.gateBoxs != null) { data.gateBoxs = this.gateBoxs.map((item: GatedBox) => item.toObject()); } + if (this.transponders != null) { + data.transponders = this.transponders.map((item: Transponder) => item.toObject()); + } return data; } serialize(): Uint8Array; @@ -351,6 +369,8 @@ export namespace graphicData { writer.writeRepeatedMessage(20, this.esbButtons, (item: EsbButton) => item.serialize(writer)); if (this.gateBoxs.length) writer.writeRepeatedMessage(21, this.gateBoxs, (item: GatedBox) => item.serialize(writer)); + if (this.transponders.length) + writer.writeRepeatedMessage(22, this.transponders, (item: Transponder) => item.serialize(writer)); if (!w) return writer.getResultBuffer(); } @@ -408,6 +428,9 @@ export namespace graphicData { case 21: reader.readMessage(message.gateBoxs, () => pb_1.Message.addToRepeatedWrapperField(message, 21, GatedBox.deserialize(reader), GatedBox)); break; + case 22: + reader.readMessage(message.transponders, () => pb_1.Message.addToRepeatedWrapperField(message, 22, Transponder.deserialize(reader), Transponder)); + break; default: reader.skipField(); } } @@ -2774,6 +2797,145 @@ export namespace graphicData { return Separator.deserialize(bytes); } } + export class Transponder extends pb_1.Message { + #one_of_decls: number[][] = []; + constructor(data?: any[] | { + common?: CommonInfo; + code?: string; + transponderType?: number; + index?: number; + }) { + super(); + pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [], this.#one_of_decls); + if (!Array.isArray(data) && typeof data == "object") { + if ("common" in data && data.common != undefined) { + this.common = data.common; + } + if ("code" in data && data.code != undefined) { + this.code = data.code; + } + if ("transponderType" in data && data.transponderType != undefined) { + this.transponderType = data.transponderType; + } + if ("index" in data && data.index != undefined) { + this.index = data.index; + } + } + } + get common() { + return pb_1.Message.getWrapperField(this, CommonInfo, 1) as CommonInfo; + } + set common(value: CommonInfo) { + pb_1.Message.setWrapperField(this, 1, value); + } + get has_common() { + return pb_1.Message.getField(this, 1) != null; + } + get code() { + return pb_1.Message.getFieldWithDefault(this, 2, "") as string; + } + set code(value: string) { + pb_1.Message.setField(this, 2, value); + } + get transponderType() { + return pb_1.Message.getFieldWithDefault(this, 3, 0) as number; + } + set transponderType(value: number) { + pb_1.Message.setField(this, 3, value); + } + get index() { + return pb_1.Message.getFieldWithDefault(this, 4, 0) as number; + } + set index(value: number) { + pb_1.Message.setField(this, 4, value); + } + static fromObject(data: { + common?: ReturnType; + code?: string; + transponderType?: number; + index?: number; + }): Transponder { + const message = new Transponder({}); + if (data.common != null) { + message.common = CommonInfo.fromObject(data.common); + } + if (data.code != null) { + message.code = data.code; + } + if (data.transponderType != null) { + message.transponderType = data.transponderType; + } + if (data.index != null) { + message.index = data.index; + } + return message; + } + toObject() { + const data: { + common?: ReturnType; + code?: string; + transponderType?: number; + index?: number; + } = {}; + if (this.common != null) { + data.common = this.common.toObject(); + } + if (this.code != null) { + data.code = this.code; + } + if (this.transponderType != null) { + data.transponderType = this.transponderType; + } + if (this.index != null) { + data.index = this.index; + } + return data; + } + serialize(): Uint8Array; + serialize(w: pb_1.BinaryWriter): void; + serialize(w?: pb_1.BinaryWriter): Uint8Array | void { + const writer = w || new pb_1.BinaryWriter(); + if (this.has_common) + writer.writeMessage(1, this.common, () => this.common.serialize(writer)); + if (this.code.length) + writer.writeString(2, this.code); + if (this.transponderType != 0) + writer.writeInt32(3, this.transponderType); + if (this.index != 0) + writer.writeInt32(4, this.index); + if (!w) + return writer.getResultBuffer(); + } + static deserialize(bytes: Uint8Array | pb_1.BinaryReader): Transponder { + const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes), message = new Transponder(); + while (reader.nextField()) { + if (reader.isEndGroup()) + break; + switch (reader.getFieldNumber()) { + case 1: + reader.readMessage(message.common, () => message.common = CommonInfo.deserialize(reader)); + break; + case 2: + message.code = reader.readString(); + break; + case 3: + message.transponderType = reader.readInt32(); + break; + case 4: + message.index = reader.readInt32(); + break; + default: reader.skipField(); + } + } + return message; + } + serializeBinary(): Uint8Array { + return this.serialize(); + } + static deserializeBinary(bytes: Uint8Array): Transponder { + return Transponder.deserialize(bytes); + } + } export class SimpleRef extends pb_1.Message { #one_of_decls: number[][] = []; constructor(data?: any[] | {