UNPKG

xiot-core-message-ts

Version:
201 lines (200 loc) 8.14 kB
"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;