Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
console.debug(`generateTD() found ${Object.keys(boundThing.events).length} Events`);
for (let eventName in boundThing.events) {
let event = boundThing.events[eventName];
// a form is generated for each address, supported protocol, and mediatype
for (let address of Helpers.getAddresses()) {
for (let type of ContentManager.getOfferedMediaTypes()) {
for (let server of servient.getServers()) {
// TODO get form directly from server, do not define URI paths here
// if server is online !==-1 assign the href information
if (server.getPort() !== -1 && server.scheme!=="mqtt") {
let href: string = server.scheme + "://" + address + ":" + server.getPort() + "/" + thing.name;
// depending on the resource pattern, uri is constructed
let newForm = new TD.Form(href + "/events/" + eventName, type);
if (server.scheme==="http") {
newForm.subProtocol = "LongPoll";
}
event.forms.push(newForm);
console.debug(`generateTD() assigns href '${href}' to Event '${eventName}'`);
}
}
}
}
// in the case of mqtt the broker URI is used within the hrefs
for (let server of servient.getServers()) {
if(server.getPort() !== -1 && server.scheme=="mqtt") {
for (let type of ContentManager.getOfferedMediaTypes()) {
try {
content = ContentSerdes.get().valueToContent(data, event.data);
} catch(err) {
console.warn(`HttpServer on port ${this.getPort()} cannot process data for Event '${eventName}: ${err.message}'`);
// subscription.unsubscribe();
thing.unsubscribeEvent(eventName);
return;
}
// send event data
console.log(`MqttBrokerServer at ${this.brokerURI} publishing to Event topic '${eventName}' `);
this.broker.publish(topic, content.body);
}
);
let href = this.brokerURI + topic;
let form = new TD.Form(href, ContentSerdes.DEFAULT);
form.op = ["subscribeevent", "unsubscribeevent"];
event.forms.push(form);
console.log(`MqttBrokerServer at ${this.brokerURI} assigns '${href}' to Event '${eventName}'`);
}
resolve();
});
}
}
}
}
// in the case of mqtt the broker URI is used within the hrefs
for (let server of servient.getServers()) {
if(server.getPort() !== -1 && server.scheme=="mqtt") {
for (let type of ContentManager.getOfferedMediaTypes()) {
// cast since MqttBrokerServer offers a getAddress
let href: string = server.scheme + "://" + server.getAddress() + ":" + server.getPort() + "/" + thing.name;
// TODO: add mqtt based vocabularies (qos, retain) to the forms
// depending on the resource pattern, uri is constructed
event.forms.push(new TD.Form(href + "/events/" + eventName, type));
console.debug(`generateTD() assigns href '${href}' to Event '${eventName}'`);
}
}
}
}
return boundThing;
}
return new Promise((resolve, reject) => {
let client = this.srv.getClientFor(Helpers.extractScheme(uri));
console.info(`WoTImpl fetching TD from '${uri}' with ${client}`);
client.readResource(new TD.Form(uri, ContentSerdes.TD))
.then((content) => {
client.stop();
if (content.type !== ContentSerdes.TD &&
content.type !== ContentSerdes.JSON_LD ) {
console.warn(`WoTImpl received TD with media type '${content.type}' from ${uri}`);
}
let td = content.body.toString();
try {
JSON.parse(td);
} catch(err) {
console.warn(`WoTImpl fetched invalid JSON from '${uri}': ${err.message}`);
}