2
0
mirror of https://github.com/esiur/esiur-js.git synced 2025-06-26 23:03:13 +00:00

Annotations

This commit is contained in:
2022-06-16 04:51:43 +03:00
parent 89d8e5b627
commit fffce4d595
7 changed files with 101 additions and 54 deletions

View File

@ -124,6 +124,7 @@ export default class DistributedConnection extends IStore {
this.requests = new KeyList();// {};
//this.pathRequests = new KeyList();// {};
this.templateRequests = new KeyList();
this.templateByNameRequests = new KeyList();
this.resourceRequests = new KeyList();// {};
this.callbackCounter = 0;
@ -2260,6 +2261,36 @@ export default class DistributedConnection extends IStore {
return reply;
}
getTemplateByClassName(className) {
let template = this.templates.find((x)=>x.className == className);
if (template != null)
return new AsyncReply(template);
else if (this.templateByNameRequests.contains(className))
return this.templateByNameRequests.item(className);
var reply = new AsyncReply();
this.templateByNameRequests.add(className, reply);
var self = this;
let classNameBytes = DC.stringToBytes(className);
this.sendRequest(IIPPacketAction.TemplateFromClassName)
.addUint8(classNameBytes.length)
.addUint8Array(classNameBytes)
.done()
.then(function (rt) {
self.templateByNameRequests.remove(className);
self.templates.add(rt[0].classId.valueOf(), rt[0]);
Warehouse.putTemplate(rt[0]);
reply.trigger(rt[0]);
});
return reply;
}
getTemplate(classId) {
if (this.templates.contains(classId))
return new AsyncReply(this.templates.item(classId));

View File

@ -145,8 +145,8 @@ export default class DistributedResource extends IResource
}
};
// get expansion
func.help = self.instance.template.functions[ft.index].expansion;
// get annotation
func.help = self.instance.template.functions[ft.index].annotation;
return func;
};

View File

@ -3,24 +3,21 @@ import MemberTemplate from './MemberTemplate.js';
import Codec from '../../Data/Codec.js';
export default class ConstantTemplate extends MemberTemplate {
//final dynamic value;
//final String? expansion;
//final RepresentationType valueType;
constructor(template, index, name,
inherited, valueType, value, expansion){
inherited, valueType, value, annotation){
super(template, index, name, inherited) ;
this.valueType = valueType;
this.value = value;
this.expansion = expansion;
this.annotation = annotation;
}
compose() {
var name = super.compose();
var hdr = this.inherited ? 0x80 : 0;
if (this.expansion != null) {
var exp = DC.stringToBytes(this.expansion);
if (this.annotation != null) {
var exp = DC.stringToBytes(this.annotation);
hdr |= 0x70;
return (BL()
.addUint8(hdr)

View File

@ -39,8 +39,8 @@ export default class EventTemplate extends MemberTemplate {
if (this.listenable) hdr |= 0x8;
if (this.expansion != null) {
let exp = DC.stringToBytes(this.expansion);
if (this.annotation != null) {
let exp = DC.stringToBytes(this.annotation);
hdr |= 0x50;
return (BL()
.addUint8(hdr)
@ -62,11 +62,11 @@ export default class EventTemplate extends MemberTemplate {
}
constructor(template, index, name, inherited, argumentType,
expansion = null, listenable = false)
annotation = null, listenable = false)
{
super(template, index, name, inherited) ;
this.argumentType = argumentType;
this.expansion = expansion;
this.annotation = annotation;
this.listenable = listenable;
}

View File

@ -41,8 +41,8 @@ export default class FunctionTemplate extends MemberTemplate {
for (var i = 0; i < this.args.length; i++) bl.addDC(this.args[i].compose());
if (this.expansion != null) {
var exp = DC.stringToBytes(this.expansion);
if (this.annotation != null) {
var exp = DC.stringToBytes(this.annotation);
bl
.addInt32(exp.length)
.addDC(exp);
@ -53,11 +53,11 @@ export default class FunctionTemplate extends MemberTemplate {
return bl.toDC();
}
constructor(template, index, name, inherited, args, returnType, expansion = null){
constructor(template, index, name, inherited, args, returnType, annotation = null){
super(template, index, name, inherited);
this.args = args;
this.returnType = returnType;
this.expansion = expansion;
this.annotation = annotation;
}
}

View File

@ -35,9 +35,9 @@ export default class PropertyTemplate extends MemberTemplate {
if (this.inherited) pv |= 0x80;
if (this.writeExpansion != null && this.readExpansion != null) {
let rexp = DC.stringToBytes(this.readExpansion);
let wexp = DC.stringToBytes(this.writeExpansion);
if (this.writeAnnotation != null && this.readAnnotation != null) {
let rexp = DC.stringToBytes(this.readAnnotation);
let wexp = DC.stringToBytes(this.writeAnnotation);
return (BL()
.addUint8(0x38 | pv)
.addUint8(name.length)
@ -48,8 +48,8 @@ export default class PropertyTemplate extends MemberTemplate {
.addInt32(rexp.length)
.addDC(rexp))
.toDC();
} else if (this.writeExpansion != null) {
let wexp = DC.stringToBytes(this.writeExpansion);
} else if (this.writeAnnotation != null) {
let wexp = DC.stringToBytes(this.writeAnnotation);
return (BL()
.addUint8(0x30 | pv)
.addUint8(name.length)
@ -58,8 +58,8 @@ export default class PropertyTemplate extends MemberTemplate {
.addInt32(wexp.length)
.addDC(wexp))
.toDC();
} else if (this.readExpansion != null) {
let rexp = DC.stringToBytes(this.readExpansion);
} else if (this.readAnnotation != null) {
let rexp = DC.stringToBytes(this.readAnnotation);
return (BL()
.addUint8(0x28 | pv)
.addUint8(name.length)
@ -78,12 +78,12 @@ export default class PropertyTemplate extends MemberTemplate {
}
constructor(template, index, name,
inherited, valueType, readExpansion = null, writeExpansion = null, recordable = false)
inherited, valueType, readAnnotation = null, writeAnnotation = null, recordable = false)
{
super(template, index, name, inherited);
this.valueType = valueType;
this.readExpansion = readExpansion;
this.writeExpansion = writeExpansion;
this.readAnnotation = readAnnotation;
this.writeAnnotation = writeAnnotation;
this.recordable = recordable;
}
}

View File

@ -344,13 +344,24 @@ export default class TypeTemplate {
this.members.push(this.constants[i]);
// bake it binarily
var b = BL();
let b = BL();
let hasClassAnnotation = template.annotation != null;
var cls = DC.stringToBytes(this.className);
b.addUint8(this.templateType)
b.addUint8( (hasClassAnnotation ? 0x40 : 0 ) | this.templateType)
.addUint8Array(this.classId.value)
.addUint8(cls.length)
.addUint8Array(cls)
.addUint32(template.version)
.addUint8Array(cls);
if (hasClassAnnotation)
{
var classAnnotationBytes = DC.stringToBytes(template.annotation);
b.addUint16(classAnnotationBytes.length)
.addUint8Array(classAnnotationBytes);
this.annotation = template.annotation;
}
b.addUint32(template.version)
.addUint16(this.members.length);
for (let i = 0; i < this.functions.length; i++)
@ -400,6 +411,7 @@ export default class TypeTemplate {
od.content = data.clip(offset, contentLength);
let hasParent = (data.getUint8(offset) & 0x80) > 0;
let hasClassAnnotation = (data.getUint8(offset) & 0x40) > 0;
od.templateType = data.getUint8(offset++) & 0xF;
@ -414,6 +426,13 @@ export default class TypeTemplate {
offset += 16;
}
if (hasClassAnnotation) {
let len = data.getUint16(offset);
offset += 2;
od.annotation = data.getString(offset, len);
offset += len;
}
od.version = data.getInt32(offset);
offset += 4;
@ -432,8 +451,8 @@ export default class TypeTemplate {
if (type == 0) // function
{
let expansion = null;
let hasExpansion = ((data.getUint8(offset++) & 0x10) == 0x10);
let annotation = null;
let hasAnnotation = ((data.getUint8(offset++) & 0x10) == 0x10);
let len = data.getUint8(offset++);
let name = data.getString(offset, len);
@ -457,25 +476,25 @@ export default class TypeTemplate {
offset += argSize;
}
if (hasExpansion) // expansion ?
if (hasAnnotation) // annotation ?
{
var cs = data.getUint32(offset);
offset += 4;
expansion = data.getString(offset, cs);
annotation = data.getString(offset, cs);
offset += cs;
}
let ft = new FunctionTemplate(od, functionIndex++, name, inherited,
args, dt.type, expansion);
args, dt.type, annotation);
od.functions.push(ft);
}
else if (type == 1) // property
{
let hasReadExpansion = ((data.getUint8(offset) & 0x8) == 0x8);
let hasWriteExpansion = ((data.getUint8(offset) & 0x10) == 0x10);
let readExpansion, writeExpansion;
let hasReadAnnotation = ((data.getUint8(offset) & 0x8) == 0x8);
let hasWriteAnnotation = ((data.getUint8(offset) & 0x10) == 0x10);
let readAnnotation, writeAnnotation;
let recordable = ((data.getUint8(offset) & 1) == 1);
let permission = ((data.getUint8(offset++) >> 1) & 0x3);
let len = data.getUint8(offset++);
@ -486,33 +505,33 @@ export default class TypeTemplate {
offset += dt.size;
if (hasReadExpansion) // expansion ?
if (hasReadAnnotation) // annotation ?
{
let cs = data.getUint32(offset);
offset += 4;
readExpansion = data.getString(offset, cs);
readAnnotation = data.getString(offset, cs);
offset += cs;
}
if (hasWriteExpansion) // expansion ?
if (hasWriteAnnotation) // annotation ?
{
let cs = data.getUint32(offset);
offset += 4;
writeExpansion = data.getString(offset, cs);
writeAnnotation = data.getString(offset, cs);
offset += cs;
}
let pt = new PropertyTemplate(od, propertyIndex++, name, inherited, dt.type, readExpansion, writeExpansion, recordable);
let pt = new PropertyTemplate(od, propertyIndex++, name, inherited, dt.type, readAnnotation, writeAnnotation, recordable);
od.properties.push(pt);
}
else if (type == 2) // Event
{
let hasExpansion = ((data.getUint8(offset) & 0x10) == 0x10);
let hasAnnotation = ((data.getUint8(offset) & 0x10) == 0x10);
let listenable = ((data.getUint8(offset++) & 0x8) == 0x8);
let len = data.getUint8(offset++);
let name = data.getString(offset, len);
let expansion;
let annotation;
offset += len;
@ -521,22 +540,22 @@ export default class TypeTemplate {
offset += dt.size;
if (hasExpansion) // expansion ?
if (hasAnnotation) // annotation ?
{
let cs = data.getUint32(offset);
offset += 4;
expansion = data.getString(offset, cs);
annotation = data.getString(offset, cs);
offset += cs;
}
let et = new EventTemplate(od, eventIndex++, name, inherited, dt.type, expansion, listenable);
let et = new EventTemplate(od, eventIndex++, name, inherited, dt.type, annotation, listenable);
od.events.push(et);
}
else if (type == 3) // constant
{
let expansion = null;
let hasExpansion = ((data[offset++] & 0x10) == 0x10);
let annotation = null;
let hasAnnotation = ((data[offset++] & 0x10) == 0x10);
let name = data.getString(offset + 1, data[offset]);
offset += data[offset] + 1;
@ -549,16 +568,16 @@ export default class TypeTemplate {
offset += parsed.size;
if (hasExpansion) // expansion ?
if (hasAnnotation) // annotation ?
{
let cs = data.getUint32(offset);
offset += 4;
expansion = data.getString(offset, cs);
annotation = data.getString(offset, cs);
offset += cs;
}
let ct = new ConstantTemplate(this, constantIndex++, name, inherited,
dt.type, parsed.reply.result, expansion);
dt.type, parsed.reply.result, annotation);
od.constants.push(ct);
}