xiot-core-xcp-ts
Version:
207 lines (206 loc) • 8.26 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.StanzaCodec = void 0;
const InitializeCodec_1 = require("./iq/device/verify/InitializeCodec");
const VerifyStartCodec_1 = require("./iq/device/verify/VerifyStartCodec");
const VerifyFinishCodec_1 = require("./iq/device/verify/VerifyFinishCodec");
const SetPropertiesCodec_1 = require("./iq/device/control/SetPropertiesCodec");
const GetPropertiesCodec_1 = require("./iq/device/control/GetPropertiesCodec");
const InvokeActionsCodec_1 = require("./iq/device/control/InvokeActionsCodec");
const GetAccessKeyCodec_1 = require("./iq/device/key/GetAccessKeyCodec");
const SetAccessKeyCodec_1 = require("./iq/device/key/SetAccessKeyCodec");
const ByebyeCodec_1 = require("./iq/basic/ByebyeCodec");
const PingCodec_1 = require("./iq/basic/PingCodec");
const GetChildrenCodec_1 = require("./iq/device/control/GetChildrenCodec");
const DeviceMessageCodec_1 = require("./message/device/DeviceMessageCodec");
const GetSummariesCodec_1 = require("./iq/device/control/GetSummariesCodec");
const GetSummaries_1 = require("../typedef/iq/device/control/GetSummaries");
const Byebye_1 = require("../typedef/iq/basic/Byebye");
const IQError_1 = require("../typedef/iq/IQError");
const IQQuery_1 = require("../typedef/iq/IQQuery");
const IQResult_1 = require("../typedef/iq/IQResult");
const IQType_1 = require("../typedef/iq/IQType");
const IQ_1 = require("../typedef/iq/IQ");
const Message_1 = require("../typedef/message/Message");
const DeviceMessage_1 = require("../typedef/message/device/DeviceMessage");
const VerifyFinish_1 = require("../typedef/iq/device/verify/VerifyFinish");
const VerifyStart_1 = require("../typedef/iq/device/verify/VerifyStart");
const Initialize_1 = require("../typedef/iq/device/verify/Initialize");
const SetAccessKey_1 = require("../typedef/iq/device/key/SetAccessKey");
const GetAccessKey_1 = require("../typedef/iq/device/key/GetAccessKey");
const GetChildren_1 = require("../typedef/iq/device/control/GetChildren");
const InvokeActions_1 = require("../typedef/iq/device/control/InvokeActions");
const GetProperties_1 = require("../typedef/iq/device/control/GetProperties");
const SetProperties_1 = require("../typedef/iq/device/control/SetProperties");
const Ping_1 = require("../typedef/iq/basic/Ping");
class StanzaCodec {
constructor() {
this.iqCodecs = new Map();
this.messageCodecs = new Map();
this.iqCodecs.set(Byebye_1.BYEBYE_METHOD, new ByebyeCodec_1.ByebyeCodec());
this.iqCodecs.set(Ping_1.PING_METHOD, new PingCodec_1.PingCodec());
this.iqCodecs.set(SetProperties_1.SET_PROPERTIES_METHOD, new SetPropertiesCodec_1.SetPropertiesCodec());
this.iqCodecs.set(GetProperties_1.GET_PROPERTIES_METHOD, new GetPropertiesCodec_1.GetPropertiesCodec());
this.iqCodecs.set(InvokeActions_1.INVOKE_ACTIONS_METHOD, new InvokeActionsCodec_1.InvokeActionsCodec());
this.iqCodecs.set(GetChildren_1.GET_CHILDREN_METHOD, new GetChildrenCodec_1.GetChildrenCodec());
this.iqCodecs.set(GetSummaries_1.GET_SUMMARIES_METHOD, new GetSummariesCodec_1.GetSummariesCodec());
this.iqCodecs.set(GetAccessKey_1.GET_ACCESS_KEY_METHOD, new GetAccessKeyCodec_1.GetAccessKeyCodec());
this.iqCodecs.set(SetAccessKey_1.SET_ACCESS_KEY_METHOD, new SetAccessKeyCodec_1.SetAccessKeyCodec());
this.iqCodecs.set(Initialize_1.INITIALIZE_METHOD, new InitializeCodec_1.InitializeCodec());
this.iqCodecs.set(VerifyStart_1.VERIFY_START_METHOD, new VerifyStartCodec_1.VerifyStartCodec());
this.iqCodecs.set(VerifyFinish_1.VERIFY_FINISH_METHOD, new VerifyFinishCodec_1.VerifyFinishCodec());
this.messageCodecs.set(DeviceMessage_1.MESSAGE_DEVICE_TOPIC, new DeviceMessageCodec_1.DeviceMessageCodec());
}
encode(m) {
if (m instanceof IQ_1.IQ) {
return this.encodeIQ(m);
}
if (m instanceof Message_1.Message) {
return this.encodeMessage(m);
}
return null;
}
encodeIQ(iq) {
if (iq instanceof IQQuery_1.IQQuery) {
return this.encodeQuery(iq);
}
if (iq instanceof IQResult_1.IQResult) {
return this.encodeResult(iq);
}
if (iq instanceof IQError_1.IQError) {
return this.encodeError(iq);
}
return null;
}
encodeQuery(query) {
const iq = {
id: query.id,
type: IQType_1.IQTypeToString(query.type),
method: query.method,
};
this.addQueryContent(iq, query);
return { iq: iq };
}
addQueryContent(o, query) {
const codec = this.iqCodecs.get(query.method);
if (codec != null) {
const content = codec.encodeQueryContent(query);
if (content != null) {
o['content'] = content;
}
}
}
encodeResult(result) {
const iq = {
id: result.id,
type: IQType_1.IQTypeToString(result.type),
method: result.method,
};
this.addResultContent(iq, result);
return { iq: iq };
}
addResultContent(o, result) {
const codec = this.iqCodecs.get(result.method);
if (codec != null) {
const content = codec.encodeResultContent(result);
if (content != null) {
o['content'] = content;
}
}
}
encodeError(error) {
const e = {
id: error.id,
type: IQType_1.IQTypeToString(error.type),
content: {
status: error.status,
description: error.description
}
};
return { iq: e };
}
encodeMessage(m) {
const codec = this.messageCodecs.get(m.topic);
if (codec == null) {
throw new Error('MessageCodec not found: ' + m.topic);
}
return {
message: {
id: m.id,
topic: m.topic,
type: m.type,
payload: codec.encode(m),
}
};
}
decode(string) {
const o = JSON.parse(string);
const iq = o['iq'];
const message = o['message'];
if (iq != null) {
return this.decodeIQ(iq);
}
if (message != null) {
return this.decodeMessage(message);
}
return null;
}
decodeMessage(o) {
const id = o.id;
const topic = o.topic;
const type = o.type;
const payload = o.payload;
const codec = this.messageCodecs.get(topic);
if (codec == null) {
throw new Error('invalid message: ' + topic);
}
return codec.decode(id, type, payload);
}
decodeIQ(o) {
const id = o['id'];
const type = o['type'];
const method = o['method'];
const content = o['content'];
switch (IQType_1.IQTypeFromString(type)) {
case IQType_1.IQType.QUERY:
return this.decodeQuery(id, method, content);
case IQType_1.IQType.RESULT:
return this.decodeResult(id, method, content);
case IQType_1.IQType.ERROR:
return this.decodeError(id, content);
default:
return null;
}
}
decodeQuery(id, method, content) {
let query;
const codec = this.iqCodecs.get(method);
if (codec != null) {
query = codec.decodeQuery(id, content);
}
else {
query = new IQQuery_1.IQQuery(id, method);
}
return query;
}
decodeResult(id, method, content) {
let result;
const codec = this.iqCodecs.get(method);
if (codec != null) {
result = codec.decodeResult(id, content);
}
else {
result = new IQQuery_1.IQQuery(id, method);
}
return result;
}
decodeError(id, content) {
if (content != null) {
const status = content['status'];
const description = content['description'];
return new IQError_1.IQError(id, status, description);
}
return null;
}
}
exports.StanzaCodec = StanzaCodec;