123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601 |
- import { ref, reactive } from 'vue'
- //import { PlatformSettings } from '../../platfrom/common/RunningParameters/PlatformSettings'
- import PlatformLogger from "@/views/front/platfrom/common/LogSystem/PlatformLogger";
- //import { BitMapInstance } from './BitMapInstance'
- import { MsgBitMap } from '../../develop/Communication/MessageHelper/MsgBitMap'
- import { TransitType } from './MessageHelper/TransitType'
- /**
- * 报文通讯域定义,交易调用
- */
-
- export enum BitMap {
- /// <summary>
- /// 核心定义
- /// </summary>
- Server,
- /// <summary>
- /// 渠道定义
- /// </summary>
- Agn,
- /// <summary>
- /// 二代支付定义
- /// </summary>
- Cnaps2
- }
- export default class Message {
-
-
- static cconv(fileData: string): string {
- throw new Error("Method not implemented.");
- }
- integrateFd(bitMapByte: Uint8Array<ArrayBuffer>): Uint8Array<ArrayBufferLike> {
- throw new Error("Method not implemented.");
- }
-
- InitGateway2CBS(txCode: string, arg1: string, arg2: string, predicate2retCode: (code: string) => boolean) {
- throw new Error("Method not implemented.")
- }
- InitHfmsApp(url: string, predicate2retCode: (code: string) => boolean) {
- throw new Error("Method not implemented.")
- }
- DoTransit(): boolean {
- throw new Error("Method not implemented.")
- }
- /// <summary>
- /// 创建Message对象
- /// </summary>
- /// <param name="type"></param>
- Message(type?: BitMap) {
- this.IsMainTrade = false;
- if (type === undefined) {
- this.TransitNode = TransitType.CallServer;
- this.Init(BitMap.Server);
- } else {
- this.Init(type);
- }
- }
-
- // 交易附件数据
- private _fileData = ref<string>('')
- public _filename = ref<string>('')
- private _fdDict: Record<string, string>
- private _BigFds_: Record<string, any> = {}
- BitMapType: BitMap
- static BitMap: any
- _transitNode: TransitType
- TransitName: string
- CustomizeTransitEntry: null
- IsMainTrade = false;
- /**
- * 交易文件附件传送标志
- */
- get fileFlag(): boolean {
- return this._fileData.value !== ''
- }
- set fileFlag(value: boolean) {
- if (!value) this._fileData.value = ''
- }
- // public Message() {
- // this.IsMainTrade = false;
- // this.TransitNode = TransitType.CallServer;
- // this.Init(BitMap.Server);
- // }
-
-
-
- /**
- * 传入的文件名
- */
- get filename(): string {
- return this._filename.value
- }
- set filename(value: string) {
- this._filename.value = value
- }
-
- /**
- * 交易文件附件数据
- */
- get fileData(): string {
- return this._fileData.value
- }
- set fileData(value: string) {
- this._fileData.value = value
- }
-
- /**
- * 获取Fd域值
- */
- public getFdVaule(fdName: string): any {
- let result = ''
- if (this._fdDict[fdName]) {
- const decoder = new TextDecoder()
- //result = this.BitMapInstance.FdBitMap[fdName].RealValue(decoder.decode(this._fdDict[fdName])) //hulei先注销
- }
- return result
- }
-
- /**
- * 获取参数指定域的组包数据
- * @param fdName - 域名称
- * @returns 指定域的组包数据
- */
- public getFdFormatValue(fdName: string): string {
- let result = '';
- if (this._fdDict[fdName]) {
- const decoder = new TextDecoder();
- // result = decoder.decode(this._fdDict[fdName]);//hulei zheg fdDict属性不明确
- }
- return result;
- }
-
-
- /**
- * 设置Fd域值
- */
- public setFdValue(fdName: string, value: any): void {
- this.setFdFormatValue(fdName, value)
- if (!fdName.endsWith('0')) {
- const bigFdName = `${fdName.substring(0, 3)}0`
- //const fds = this.BitMapInstance.FdBitMap[bigFdName]
- // delete this._BigFds_[fds.Code]
-
- // for (const fd of fds.Children) {
- // if (fd.Code === fdName) break
- // if (!this._fdDict[fd.Code]) {
- // this.setFdFormatValue(fd.Code, null)
- // }
- // }
- }
- }
-
- // private BitMapInstance(BitMapType: any): MsgBitMap {
- // switch (BitMapType) {
- // case BitMap.Server:
- // return MsgBitMap.Instance_Server;
- // case BitMap.Agn:
- // return MsgBitMap.Instance_Agn;
- // case BitMap.Cnaps2:
- // return MsgBitMap.Instance_Cnaps2;
- // default:
- // return MsgBitMap.Instance_Server;
- // }
-
- // }
- get BitMapInstance(): MsgBitMap {
- switch (this.BitMapType) {
- case BitMap.Server:
- return MsgBitMap.Instance_Server;
- case BitMap.Agn:
- return MsgBitMap.Instance_Agn;
- case BitMap.Cnaps2:
- return MsgBitMap.Instance_Cnaps2;
- default:
- return MsgBitMap.Instance_Server;
- }
- }
- /**
- * 根据域类型格式化输入数据
- */
- private setFdFormatValue(fdName: string, value: any): void {
- // if (this.BitMapInstance.FdBitMap[fdName]) {
- // // const item = this.BitMapInstance.FdBitMap[fdName]
- // const encoder = new TextEncoder()
- // const formatValue = encoder.encode()//item.FormatValue(value)
-
- // this._fdDict[fdName] = formatValue
- // }
- //hulei 报错了需要处理
- }
-
- /**
- * 初始化,清空所有域和附件
- * @param type 位图类型
- */
- public Init(type?: BitMap): void {
- if (type === undefined) {
- // this._fdDict.Clear();hulei 这里情况的操作是Dictionary的方法 需要寻找代替的类型
- this._fileData = null;
- // //TransitNode = TransitType.CallServer; //初始化默认为CallServer
- // //BitMapType = type;
- this.CustomizeTransitEntry = null;
- // Extra = new Dictionary<string, object>();
- } else {
- // this._fdDict = {};
- // this._fileData = '';
- // this.TransitNode = TransitType.CallServer; // 初始化默认为 CallServer
- this.BitMapType = type;
-
-
- }
-
- }
- public anilyzeFd(msgData: Uint8Array): boolean {
- // 拆解位图,报文数据区格式为 5位报文类型+8/16位位图区域+有效数据区
- // 标志位,是否采用128位位图
- const isBitmap128 = msgData[5].toString(2).padStart(8, '0').startsWith('1');
- let bitMap = '';
- const msgBit = new Uint8Array(isBitmap128 ? 16 : 8);
- msgBit.set(msgData.slice(5, 5 + msgBit.length));
- // 扩展16位字符串转换为128位01格式的位图字符串
- for (const bytes of msgBit) {
- bitMap += bytes.toString(2).padStart(8, '0');
- }
- // 拆解数据部分
- const startIndex = 5 + (isBitmap128 ? 16 : 8);
- const data = new Uint8Array(msgData.length - startIndex);
- data.set(msgData.slice(startIndex));
- let curPosition = 0;
- // 日志内容
- const logInfo: string[] = [];
- logInfo.push("解包数据:");
- logInfo.push(`解包位图:[${bitMap}]`);
- try {
- // 循环解包
- for (let i = 0; i < bitMap.length; i++) {
- if (bitMap[i] === '1') {
- // 第一位为标志位
- if (i + 1 === 1) {
- continue;
- }
- const fdName = (i + 1).toString().padStart(3, '0') + "0";
-
- if (!this.BitMapInstance.FdBitMap[fdName]) {
- continue;
- }
- // 先清理组包数据,否则解析子域会产生数据交错
- clearFd(i + 1);
- const item = this.BitMapInstance.FdBitMap[fdName];
- let tmp: Uint8Array | null = null;
- switch (item.FieldType) {
- case "-1":
- break;
- case "0":
- // 定长域
- tmp = new Uint8Array(item.Length);
- // 截取数据区域,判定新位置
- tmp.set(data.slice(curPosition, curPosition + item.Length));
- curPosition += item.Length;
- break;
- default:
- // 变长域
- // 获取数据长度
- const len = parseInt(item.FieldType, 10);
- tmp = new Uint8Array(len);
- tmp.set(data.slice(curPosition, curPosition + len));
- curPosition += len;
- // 获取数据部分
- const length = parseInt(encodingToString(tmp), 10);
- tmp = new Uint8Array(length);
- tmp.set(data.slice(curPosition, curPosition + length));
- curPosition += length;
- break;
- }
- if (!tmp) continue;
- // 记录日志
- const value = encodingToString(tmp);
- logInfo.push(`第${(i + 1).toString().padStart(3, '0')}域:[${value}]`);
- if (!item.Children || item.Children.length === 0) {
- // // 生僻字处理,字符类型FD需要检查
- // if ("056".includes(item.Type) && hasCconvKey(value)) {
- // const val = item.RealValue ? item.RealValue(value) : value;
- // const newVal = item.FormatValue ? item.FormatValue(cconv(val as string, false)) : val;
- // tmp = encodingGetBytes(newVal);
- // }//hulei 生僻字处理暂时放弃
- // if (fdDict.hasOwnProperty(item.Code)) { //hulei typescript中是否有类似于wpf的 Dictionary类型
- // fdDict[item.Code] = tmp;
- // } else {
- // fdDict[item.Code] = tmp;
- // }
- } else {
- // 循环给子域赋值,子域暂时只存在定长域
- let index = 0;
- for (const child of item.Children) {
- if (index >= tmp.length) break;
- // 子域为定长
- const childLen = Math.min(index + child.Length, tmp.length) - index;
- const childData = new Uint8Array(childLen);
- childData.set(tmp.slice(index, index + childLen));
- index += childData.length;
- const chindValue = encodingToString(childData);
- // // 生僻字处理,字符类型FD需要检查
- // if ("056".includes(child.Type) && hasCconvKey(chindValue)) {
- // const val = child.RealValue ? child.RealValue(chindValue) : chindValue;
- // const newVal = child.FormatValue ? child.FormatValue(cconv(val as string, false)) : val;
- // childData = encodingGetBytes(newVal);
- // }hulei 生僻字处理暂时放弃
- // if (fdDict.hasOwnProperty(child.Code)) {//hulei typescript中是否有类似于wpf的 Dictionary类型
- // fdDict[child.Code] = childData;
- // } else {
- // fdDict[child.Code] = childData;
- // }
- }
- }
- }
- }
- // 解包完成后将解析数据写入交易日志文件
- communicationInfo(logInfo.join('\n'));
- return true;
- } catch (e) {
- // 解包失败
- logInfo.push(`解包出错:${(e as Error).message}`);
- communicationInfo(logInfo.join('\n'));
- return false;
- }
- }
- // 以下是各域的定义,保持与C#代码相同的命名规范
- get Fd1(): string { return this.getFdVaule('0010').toString() }
- set Fd1(value: string) { this.setFdValue('0010', value) }
-
- get Fd2(): string { return this.getFdVaule('0020').toString() }
- set Fd2(value: string) { this.setFdValue('0020', value) }
-
- get Fd3(): string { return this.getFdVaule('0030').toString() }
- set Fd3(value: string) { this.setFdValue('0030', value) }
-
- get Fd4(): string { return this.getFdVaule('0040').toString() }
- set Fd4(value: string) { this.setFdValue('0040', value) }
-
- get Fd5(): string { return this.getFdVaule('0050').toString() }
- set Fd5(value: string) { this.setFdValue('0050', value) }
-
- get Fd6(): string { return this.getFdVaule('0060').toString() }
- set Fd6(value: string) { this.setFdValue('0060', value) }
-
- get Fd7(): string { return this.getFdVaule('0070').toString() }
- set Fd7(value: string) { this.setFdValue('0070', value) }
-
- get Fd8(): string { return this.getFdVaule('0080').toString() }
- set Fd8(value: string) { this.setFdValue('0080', value) }
-
- get Fd9_1(): string { return this.getFdVaule('0091').toString() }
- set Fd9_1(value: string) { this.setFdValue('0091', value) }
-
- get Fd9_2(): string { return this.getFdVaule('0092').toString() }
- set Fd9_2(value: string) { this.setFdValue('0092', value) }
-
- get Fd9_3(): string { return this.getFdVaule('0093').toString() }
- set Fd9_3(value: string) { this.setFdValue('0093', value) }
-
- get Fd9_4(): string { return this.getFdVaule('0094').toString() }
- set Fd9_4(value: string) { this.setFdValue('0094', value) }
-
- get Fd10(): string { return this.getFdVaule('0100').toString() }
- set Fd10(value: string) { this.setFdValue('0100', value) }
-
- // 继续实现其他域...
- get Fd11(): string { return this.getFdVaule('0110').toString() }
- set Fd11(value: string) { this.setFdValue('0110', value) }
-
- get Fd12(): string { return this.getFdVaule('0120').toString() }
- set Fd12(value: string) { this.setFdValue('0120', value) }
-
- get Fd13(): string { return this.getFdVaule('0130').toString() }
- set Fd13(value: string) { this.setFdValue('0130', value) }
-
- get Fd14(): string { return this.getFdVaule('0140').toString() }
- set Fd14(value: string) { this.setFdValue('0140', value) }
-
- get Fd15_1(): string { return this.getFdVaule('0151').toString() }
- set Fd15_1(value: string) { this.setFdValue('0151', value) }
-
- get Fd15_2(): string { return this.getFdVaule('0152').toString() }
- set Fd15_2(value: string) { this.setFdValue('0152', value) }
-
- get Fd15_3(): string { return this.getFdVaule('0153').toString() }
- set Fd15_3(value: string) { this.setFdValue('0153', value) }
-
- get Fd15_4(): string { return this.getFdVaule('0154').toString() }
- set Fd15_4(value: string) { this.setFdValue('0154', value) }
-
- get Fd15_5(): string { return this.getFdVaule('0155').toString() }
- set Fd15_5(value: string) { this.setFdValue('0155', value) }
-
- get Fd15_6(): string { return this.getFdVaule('0156').toString() }
- set Fd15_6(value: string) { this.setFdValue('0156', value) }
-
- get Fd15_7(): string { return this.getFdVaule('0157').toString() }
- set Fd15_7(value: string) { this.setFdValue('0157', value) }
-
- get Fd15_8(): string { return this.getFdVaule('0158').toString() }
- set Fd15_8(value: string) { this.setFdValue('0158', value) }
-
- get Fd15_9(): string { return this.getFdVaule('0159').toString() }
- set Fd15_9(value: string) { this.setFdValue('0159', value) }
-
- get Fd15_A(): string { return this.getFdVaule('015A').toString() }
- set Fd15_A(value: string) { this.setFdValue('015A', value) }
-
- get Fd15_B(): string { return this.getFdVaule('015B').toString() }
- set Fd15_B(value: string) { this.setFdValue('015B', value) }
-
- get Fd15_C(): string { return this.getFdVaule('015C').toString() }
- set Fd15_C(value: string) { this.setFdValue('015C', value) }
-
- get Fd15_D(): string { return this.getFdVaule('015D').toString() }
- set Fd15_D(value: string) { this.setFdValue('015D', value) }
-
- get Fd15_E(): string { return this.getFdVaule('015E').toString() }
- set Fd15_E(value: string) { this.setFdValue('015E', value) }
-
- get Fd15_F(): string { return this.getFdVaule('015F').toString() }
- set Fd15_F(value: string) { this.setFdValue('015F', value) }
-
- get Fd15_G(): string { return this.getFdVaule('015G').toString() }
- set Fd15_G(value: string) { this.setFdValue('015G', value) }
-
- get Fd15_H(): string { return this.getFdVaule('015H').toString() }
- set Fd15_H(value: string) { this.setFdValue('015H', value) }
-
- get Fd15_I(): string { return this.getFdVaule('015I').toString() }
- set Fd15_I(value: string) { this.setFdValue('015I', value) }
-
- get Fd15_J(): string { return this.getFdVaule('015J').toString() }
- set Fd15_J(value: string) { this.setFdValue('015J', value) }
-
- // 继续实现剩余域...
- get Fd16(): string { return this.getFdVaule('0160').toString() }
- set Fd16(value: string) { this.setFdValue('0160', value) }
-
- get Fd17(): string { return this.getFdVaule('0170').toString() }
- set Fd17(value: string) { this.setFdValue('0170', value) }
-
- get Fd18(): string { return this.getFdVaule('0180').toString() }
- set Fd18(value: string) { this.setFdValue('0180', value) }
-
- get Fd19_1(): string { return this.getFdVaule('0191').toString() }
- set Fd19_1(value: string) { this.setFdValue('0191', value) }
-
- get Fd19_2(): string { return this.getFdVaule('0192').toString() }
- set Fd19_2(value: string) { this.setFdValue('0192', value) }
-
- get Fd19_3(): string { return this.getFdVaule('0193').toString() }
- set Fd19_3(value: string) { this.setFdValue('0193', value) }
-
- get Fd19_4(): string { return this.getFdVaule('0194').toString() }
- set Fd19_4(value: string) { this.setFdValue('0194', value) }
-
- get Fd19_5(): string { return this.getFdVaule('0195').toString() }
- set Fd19_5(value: string) { this.setFdValue('0195', value) }
-
- get Fd20(): string { return this.getFdVaule('0200').toString() }
- set Fd20(value: string) { this.setFdValue('0200', value) }
- get Fd21(): string { return this.getFdVaule('0210').toString() }
- set Fd21(value: string) { this.setFdValue('0210', value) }
- get Fd22(): string { return this.getFdVaule('0220').toString() }
- set Fd22(value: string) { this.setFdValue('0220', value) }
-
-
- get Fd30(): string { return this.getFdVaule('0300').toString() }
- set Fd30(value: string) { this.setFdValue('0300', value) }
- get Fd66(): string { return this.getFdVaule('0660').toString() }
- set Fd66(value: string) { this.setFdValue('0660', value) }
-
- get Fd23(): string { return this.getFdVaule('0100').toString() }
- set Fd23(value: string) { this.setFdValue('0100', value) }
-
- get Fd24(): string { return this.getFdVaule('0100').toString() }
- set Fd24(value: string) { this.setFdValue('0100', value) }
-
- get Fd25(): string { return this.getFdVaule('0100').toString() }
- set Fd25(value: string) { this.setFdValue('0100', value) }
-
- get Fd26(): string { return this.getFdVaule('0100').toString() }
- set Fd26(value: string) { this.setFdValue('0100', value) }
-
- get Fd27(): string { return this.getFdVaule('0100').toString() }
- set Fd27(value: string) { this.setFdValue('0100', value) }
-
- get Fd28(): string { return this.getFdVaule('0100').toString() }
- set Fd28(value: string) { this.setFdValue('0100', value) }
- get Fd29(): string { return this.getFdVaule('0100').toString() }
- set Fd29(value: string) { this.setFdValue('0100', value) }
-
- get Fd31(): string { return this.getFdVaule('0100').toString() }
- set Fd31(value: string) { this.setFdValue('0100', value) }
-
- get Fd32(): string { return this.getFdVaule('0100').toString() }
- set Fd32(value: string) { this.setFdValue('0100', value) }
-
- get Fd33(): string { return this.getFdVaule('0100').toString() }
- set Fd33(value: string) { this.setFdValue('0100', value) }
- get Fd34(): string { return this.getFdVaule('0100').toString() }
- set Fd34(value: string) { this.setFdValue('0100', value) }
- get Fd35(): string { return this.getFdVaule('0100').toString() }
- set Fd35(value: string) { this.setFdValue('0100', value) }
- get Fd36(): string { return this.getFdVaule('0100').toString() }
- set Fd36(value: string) { this.setFdValue('0100', value) }
-
- get Fd37(): string { return this.getFdVaule('0100').toString() }
- set Fd37(value: string) { this.setFdValue('0100', value) }
-
- get Fd38(): string { return this.getFdVaule('0100').toString() }
- set Fd38(value: string) { this.setFdValue('0100', value) }
-
- get Fd39(): string { return this.getFdVaule('0100').toString() }
- set Fd39(value: string) { this.setFdValue('0100', value) }
-
- get Fd40(): string { return this.getFdVaule('0100').toString() }
- set Fd40(value: string) { this.setFdValue('0100', value) }
-
- get Fd41(): string { return this.getFdVaule('0100').toString() }
- set Fd41(value: string) { this.setFdValue('0100', value) }
-
- get Fd42(): string { return this.getFdVaule('0100').toString() }
- set Fd42(value: string) { this.setFdValue('0100', value) }
-
- get Fd43(): string { return this.getFdVaule('0100').toString() }
- set Fd43(value: string) { this.setFdValue('0100', value) }
-
- get Fd44(): string { return this.getFdVaule('0100').toString() }
- set Fd44(value: string) { this.setFdValue('0100', value) }
-
- get Fd45(): string { return this.getFdVaule('0100').toString() }
- set Fd45(value: string) { this.setFdValue('0100', value) }
-
- get Fd46(): string { return this.getFdVaule('0100').toString() }
- set Fd46(value: string) { this.setFdValue('0100', value) }
-
- get Fd47(): string { return this.getFdVaule('0100').toString() }
- set Fd47(value: string) { this.setFdValue('0100', value) }
-
- get Fd48(): string { return this.getFdVaule('0100').toString() }
- set Fd48(value: string) { this.setFdValue('0100', value) }
-
- get Fd49(): string { return this.getFdVaule('0100').toString() }
- set Fd49(value: string) { this.setFdValue('0100', value) }
-
- get Fd50(): string { return this.getFdVaule('0100').toString() }
- set Fd50(value: string) { this.setFdValue('0100', value) }
-
- get Fd51(): string { return this.getFdVaule('0100').toString() }
- set Fd51(value: string) { this.setFdValue('0100', value) }
-
- get Fd52(): string { return this.getFdVaule('0100').toString() }
- set Fd52(value: string) { this.setFdValue('0100', value) }
-
- get Fd53(): string { return this.getFdVaule('0100').toString() }
- set Fd53(value: string) { this.setFdValue('0100', value) }
-
- get Fd54(): string { return this.getFdVaule('0100').toString() }
- set Fd54(value: string) { this.setFdValue('0100', value) }
-
- get Fd55(): string { return this.getFdVaule('0100').toString() }
- set Fd55(value: string) { this.setFdValue('0100', value) }
- get Fd56(): string { return this.getFdVaule('0100').toString() }
- set Fd56(value: string) { this.setFdValue('0100', value) }
-
- get Fd57(): string { return this.getFdVaule('0100').toString() }
- set Fd57(value: string) { this.setFdValue('0100', value) }
- get Fd58(): string { return this.getFdVaule('0100').toString() }
- set Fd58(value: string) { this.setFdValue('0100', value) }
- get Fd59(): string { return this.getFdVaule('0100').toString() }
- set Fd59(value: string) { this.setFdValue('0100', value) }
- get Fd92(): string { return this.getFdVaule('0100').toString() }
- set Fd92(value: string) { this.setFdValue('0100', value) }
- get Fd98(): string { return this.getFdVaule('0100').toString() }
- set Fd98(value: string) { this.setFdValue('0100', value) }
- /**
- * 通讯外端
- */
- get TransitNode(): TransitType {
- return this._transitNode;
- }
-
- set TransitNode(value: TransitType) {
- this._transitNode = value;
- this.TransitName = value.toString();
- }
- // 实现剩余所有域...
- // 按照相同模式实现Fd21到Fd47的所有域
- }
- function clearFd(arg0: number) {
- throw new Error('Function not implemented.');
- }
-
- function encodingToString(tmp: Uint8Array<ArrayBufferLike>): string {
- throw new Error('Function not implemented.');
- }
- function communicationInfo(arg0: string) {
- throw new Error('Function not implemented.');
- }
|