import {AckInfo, TermCmd} from './helper.mjs'
class EyeCommand {
cmdId;
terminal;
recvTime;
realTime;
cacheTime;
paras;
set(k, v) {
if (!this.paras) {
this.paras = {};
}
this.paras[k] = v;
}
setTime(k, epochMillis) {
this.set(k, utils.millisToStr(epochMillis));
}
setTimeOpt(k, epochMillis) {
if (epochMillis)
this.setTime(k, epochMillis);
}
getDef(k, defaultValue) {
if (!this.paras)
return defaultValue;
const r = this.paras.get(k);
if (r === undefined)
return defaultValue;
return r;
}
}
class EyeGatewayMsg {
key;
seq;
cmdUuid;
sessionId;
source;
recvTime;
cmdId;
error;
command;
paramGroup;
}
function paramGroup00(msg) {
if (!msg.paramGroup)
return undefined;
if (typeof msg.paramGroup.get === 'function')
return msg.paramGroup.get('00');
else if (msg.paramGroup.hasOwnProperty('00'))
return msg.paramGroup['00'];
else
return undefined;
}
function paramGroup00Prop(msg, propName) {
if (!msg.paramGroup)
return undefined;
let map = msg.paramGroup['00'];
if (!map)
return undefined;
return map[propName];
}
function getGeneralAckInfo(ackMsg, r) {
r.ackMsgId = ackMsg.command.cmdId.substring(2);
r.ackSeqNo = ackMsg.seq;
if (ackMsg.error) {
let params = paramGroup00(ackMsg);
if (params) {
let codeStr;
if (typeof params.get === 'function') {
codeStr = params.get("F0010000");
} else if (params.hasOwnProperty('F0010000')) {
codeStr = params['F0010000'];
} else
codeStr = null;
if (codeStr !== null && codeStr !== undefined) {
r.ackCode = parseInt(codeStr);
}
}
} else
r.ackCode = 0;
return r.ackMsgId;
}
export function getAckInfo(strMsg) {
let ackMsgId;
let ackParams;
let params;
const ackMsg = JSON.parse(strMsg);
if (!ackMsg.command || !ackMsg.command.cmdId)
return undefined;
const r = new AckInfo();
r.simNo = ackMsg.key;
r.origCmdId = ackMsg.cmdUuid;
switch (ackMsg.command.cmdId) {
case "169205":
let ack = paramGroup00Prop(ackMsg, '060D1023');
if (ack) {
ackMsgId = "1205";
let ap = {};
let list = [];
const resList = ack.split(";");
resList.forEach(res => {
const items = res.split(",");
if (items && items.length >= 10) {
const avRes = {};
avRes.chan = parseInt(items[1]);
avRes.startTm = utils.strToMillis(items[2]);
avRes.endTm = utils.strToMillis(items[3]);
avRes.almSt808 = parseInt(items[4]);
avRes.almSt1078 = parseInt(items[5]);
avRes.mediaTyp = parseInt(items[6]);
avRes.codeStrm = parseInt(items[7]);
avRes.stgTyp = parseInt(items[8]);
avRes.fileSz = parseInt(items[9]);
list.push(avRes);
}
});
ap.resList = list;
ackParams = ap;
}
break;
case "168107":
ackMsgId = "0107";
params = paramGroup00(ackMsg);
if (params) {
let ap = {};
let s = params.get("00000001");
ap.terminalType = parseInt(s, 16);
ap.factoryId = utils.hexToGbk(params.get("00010004"));
ap.modal = utils.hexToGbk(params.get("00010003"));
ap.terminalId = utils.hexToGbk(params.get("00010001"));
ap.iccid = params.get("00000005");
ap.hardwareVer = params.get("00010101");
ap.firmwareVer = params.get("00010103");
ap.gnssModuleAttrs = parseInt(params.get("00000008"), 16)
ap.commModuleAttrs = parseInt(params.get("00000009"), 16)
ackParams = ap;
}
break;
case "169003":
ackMsgId = "1003";
params = paramGroup00(ackMsg);
if (params) {
let ap = {};
ap.audioCodec = parseInt(params.get("00020004"));
ap.audioChannels = parseInt(params.get("00020005"));
ap.audioSampleRate = parseInt(params.get("00020006"));
ap.audioBitsPerSample = parseInt(params.get("00020007"));
ap.audioFrameSize = parseInt(params.get("00020008"));
ap.supportAudioOut = parseInt(params.get("00020009")) !== 0;
ap.videoCodec = parseInt(params.get("00020010"))
ap.maxAudioChannels = parseInt(params.get("00020011"));
ap.maxVideoChannels = parseInt(params.get("00020012"));
ackParams = ap;
}
break;
case "169206":
ackMsgId = getGeneralAckInfo(ackMsg, r);
break;
case "169101":
ackMsgId = getGeneralAckInfo(ackMsg, r);
break;
case "169201":
ackMsgId = getGeneralAckInfo(ackMsg, r);
break;
case "169208":
ackMsgId = getGeneralAckInfo(ackMsg, r);
break;
}
r.ackMsgId = ackMsgId;
r.ackParams = ackParams ? JSON.stringify(ackParams) : undefined;
return r;
}
export function convertTermCmd(cmd) {
utils.log(cmd);
const r = new EyeGatewayMsg();
r.key = cmd.getSimNo();
r.cmdUuid = cmd.getExternalId();
r.source = "media";
const time = new Date();
r.recvTime = utils.millisToOdtStr(time.getTime());
const c = new EyeCommand();
c.realTime = 1;
const cp = cmd.getParams();
switch (cmd.getMsgId()) {
case "8107":
c.cmdId = "13FF02";
break;
case "9003":
c.cmdId = "13FF04";
break;
case "9101":
c.cmdId = "169101";
c.set("060D1001", cp.getServerIp());
c.set("060D1002", cp.getTcpPort());
c.set("060D1003", cp.getUdpPort());
c.set("060D1004", cp.getChan());
c.set("060D1005", cp.getDataTyp() ? cp.getDataTyp() : 0);
c.set("060D1006", cp.getCodeStrm() ? cp.getCodeStrm() : 0);
utils.log(JSON.stringify(c));
break;
case "9102":
c.cmdId = "169102";
c.set("060D1004", cp.getChan());
c.set("06091001", cp.getCtrl());
c.set("06091002", cp.getCloseAction() ? cp.getCloseAction() : 0);
c.set("060D1006", cp.getCodeStrm() ? cp.getCodeStrm() : 0);
break;
case "9105":
c.cmdId = "169105";
c.set("060D1004", cp.getChan());
c.set("06091003", cp.getLostRate());
break;
case "9201":
c.cmdId = "169201";
c.set("060D1001", cp.getServerIp());
c.set("060D1002", cp.getTcpPort());
c.set("060D1003", cp.getUdpPort());
c.set("060D1004", cp.getChan());
c.set("060D1005", cp.getMediaTyp());
c.set("060D1006", cp.getCodeStrm());
c.set("06091005", cp.getStgTyp());
c.set("060D1008", cp.getMode());
c.set("060D1009", cp.getFactor() ? cp.getFactor() : 0);
c.setTime("05010001", cp.getStartTm());
c.setTimeOpt("05010002", cp.getEndTm());
break;
case "9202":
c.cmdId = "169202";
c.set("060D1004", cp.getChan());
c.set("060D1008", cp.getCtrl());
c.set("060D1009", cp.getFactor() ? cp.getFactor() : 0);
if (cp.tm)
c.setTime("05010001", cp.getTm());
break;
case "9205":
c.cmdId = "169205";
c.set("060D1004", cp.getChan());
c.setTimeOpt("05010001", cp.getStartTm());
c.setTimeOpt("05010002", cp.getEndTm());
c.set("06091004", cp.getAlmFilter808() + ',' + cp.getAlmFilter1078());
c.set("060D1005", cp.getMediaTyp());
c.set("060D1006", cp.getCodeStrm());
c.set("06091005", cp.getStgTyp());
utils.log(JSON.stringify(c));
break;
case "9206":
c.cmdId = "169206";
c.set("060D100C", cp.getFtpHost());
c.set("060D100D", cp.getFtpPort());
c.set("060D100E", cp.getFtpUser());
c.set("060D100F", cp.getFtpPwd());
c.set("060D1010", cp.getUploadPath());
c.set("060D1004", cp.getChan());
c.setTime("05010001", cp.getStartTm());
c.setTime("05010002", cp.getEndTm());
let f = cp.getAlmFilter1078();
f <<= 32;
f |= cp.getAlmFilter808();
c.set("06091004", f);
c.set("060D1005", cp.getMediaTyp());
c.set("060D1006", cp.getCodeStrm());
c.set("06091005", cp.getStgTyp());
c.set("06091006", cp.getWhen());
break;
case "9207":
c.cmdId = "169207";
c.set("0008000F", cp.getOrigSeqNo());
c.set("06091001", cp.getCtrl());
break;
case "9208":
c.cmdId = "169208";
c.set("060D1001", cp.getServerIp());
c.set("0101010C", cp.getTcpPort());
c.set("0101010D", cp.getUdpPort());
c.set("060D1017", cp.getAlmNo());
c.set("060D1018", cp.getAlmId());
break;
default:
return undefined;
}
r.cmdId = c.cmdId;
r.command = c;
return JSON.stringify(r);
}