xiot-core-message-ts
Version:
201 lines (200 loc) • 8.14 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const Initialize_1 = require("../typedef/iq/basic/Initialize");
const InitializeCodec_1 = require("./iq/InitializeCodec");
const VerifyStart_1 = require("../typedef/iq/basic/VerifyStart");
const VerifyStartCodec_1 = require("./iq/VerifyStartCodec");
const VerifyFinishCodec_1 = require("./iq/VerifyFinishCodec");
const VerifyFinish_1 = require("../typedef/iq/basic/VerifyFinish");
const SetPropertiesCodec_1 = require("./iq/SetPropertiesCodec");
const SetProperties_1 = require("../typedef/iq/basic/SetProperties");
const GetPropertiesCodec_1 = require("./iq/GetPropertiesCodec");
const GetProperties_1 = require("../typedef/iq/basic/GetProperties");
const PropertiesChangedCodec_1 = require("./iq/PropertiesChangedCodec");
const PropertiesChanged_1 = require("../typedef/iq/basic/PropertiesChanged");
const InvokeActionCodec_1 = require("./iq/InvokeActionCodec");
const InvokeAction_1 = require("../typedef/iq/basic/InvokeAction");
const GetAccessKeyCodec_1 = require("./iq/GetAccessKeyCodec");
const SetAccessKeyCodec_1 = require("./iq/SetAccessKeyCodec");
const GetAccessKey_1 = require("../typedef/iq/basic/GetAccessKey");
const SetAccessKey_1 = require("../typedef/iq/basic/SetAccessKey");
const ByebyeCodec_1 = require("./iq/ByebyeCodec");
const Byebye_1 = require("../typedef/iq/basic/Byebye");
const IQ_1 = require("../typedef/iq/IQ");
const IQType_1 = require("../typedef/iq/IQType");
const IQQuery_1 = require("../typedef/iq/IQQuery");
const IQResult_1 = require("../typedef/iq/IQResult");
const IQError_1 = require("../typedef/iq/IQError");
const Ping_1 = require("../typedef/iq/basic/Ping");
const PingCodec_1 = require("./iq/PingCodec");
const EventOccurredCodec_1 = require("./iq/EventOccurredCodec");
const EventOccurred_1 = require("../typedef/iq/basic/EventOccurred");
const GetChildrenCodec_1 = require("./iq/GetChildrenCodec");
const GetChildren_1 = require("../typedef/iq/basic/GetChildren");
const ChildrenAdded_1 = require("../typedef/iq/basic/ChildrenAdded");
const ChildrenRemoved_1 = require("../typedef/iq/basic/ChildrenRemoved");
const ChildrenAddedCodec_1 = require("./iq/ChildrenAddedCodec");
const ChildrenRemovedCodec_1 = require("./iq/ChildrenRemovedCodec");
class XcpMessageCodec {
constructor() {
this.iqCodecs = new Map();
this.noticeCodecs = new Map();
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.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(PropertiesChanged_1.PROPERTIES_CHANGED_METHOD, new PropertiesChangedCodec_1.PropertiesChangedCodec());
this.iqCodecs.set(InvokeAction_1.INVOKE_ACTION_METHOD, new InvokeActionCodec_1.InvokeActionCodec());
this.iqCodecs.set(EventOccurred_1.EVENT_OCCURRED_METHOD, new EventOccurredCodec_1.EventOccurredCodec());
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(Byebye_1.BYEBYE_METHOD, new ByebyeCodec_1.ByebyeCodec());
this.iqCodecs.set(Ping_1.PING_METHOD, new PingCodec_1.PingCodec());
this.iqCodecs.set(GetChildren_1.GET_CHILDREN_METHOD, new GetChildrenCodec_1.GetChildrenCodec());
this.iqCodecs.set(ChildrenAdded_1.CHILDREN_ADDED_METHOD, new ChildrenAddedCodec_1.ChildrenAddedCodec());
this.iqCodecs.set(ChildrenRemoved_1.CHILDREN_REMOVED_METHOD, new ChildrenRemovedCodec_1.ChildrenRemovedCodec());
}
encode(m) {
if (m instanceof IQ_1.IQ) {
return this.encodeIQ(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,
from: query.from,
to: query.to,
};
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,
from: result.from,
to: result.to
};
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),
from: error.from,
to: error.to,
content: {
status: error.status,
description: error.description
}
};
return { iq: e };
}
decode(string) {
const o = JSON.parse(string);
const iq = o['iq'];
if (iq != null) {
return this.decodeIQ(iq);
}
else {
console.log('iq is null');
}
return null;
}
decodeIQ(o) {
const id = o['id'];
const type = o['type'];
const method = o['method'];
const from = o['from'];
const to = o['to'];
const content = o['content'];
switch (IQType_1.IQTypeFromString(type)) {
case IQType_1.IQType.QUERY:
return this.decodeQuery(id, method, from, to, content);
case IQType_1.IQType.RESULT:
return this.decodeResult(id, method, from, to, content);
case IQType_1.IQType.ERROR:
return this.decodeError(id, from, to, content);
default:
return null;
}
}
decodeQuery(id, method, from, to, 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);
}
if (query) {
query.from = from;
query.to = to;
}
return query;
}
decodeResult(id, method, from, to, 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);
}
if (result) {
result.from = from;
result.to = to;
}
return result;
}
decodeError(id, from, to, content) {
if (content != null) {
const status = content['status'];
const description = content['description'];
const error = new IQError_1.IQError(id, status, description);
error.from = from;
error.to = to;
return error;
}
return null;
}
}
exports.XcpMessageCodec = XcpMessageCodec;