2
0
mirror of https://github.com/esiur/esiur-js.git synced 2026-04-03 21:48:21 +00:00
This commit is contained in:
2021-08-12 03:11:59 +03:00
parent ba4d841aa5
commit 8eb67ae4fb
11 changed files with 961 additions and 117 deletions

View File

@@ -32,6 +32,8 @@ import TemplateDataType from "./TemplateDataType.js";
import IResource from '../IResource.js';
import IRecord from '../../Data/IRecord.js';
import TemplateType from './TemplateType.js'
import Warehouse from '../Warehouse.js';
import DistributedConnection from '../../Net/IIP/DistributedConnection.js';
export default class TypeTemplate {
@@ -95,13 +97,13 @@ export default class TypeTemplate {
static getTypeGuid(type) {
return getTypeGuidByName(type.template.namespace + "." + type.prototype.constructor.name);
return this.getTypeGuidByName(type.template.namespace + "." + type.prototype.constructor.name);
}
static getTypeGuidByName(typeName)
{
return SHA256.compute(DC.stringToBytes(this.className)).getGuid(0);
}
return SHA256.compute(DC.stringToBytes(typeName)).getGuid(0);
}
static getDependencies(template)
@@ -119,11 +121,11 @@ export default class TypeTemplate {
return;
// functions
for(var i = 0; i < tmp.functions.length; i++)
for(let i = 0; i < tmp.functions.length; i++)
{
f = tmp.functions[i];
let ft = tmp.functions[i];
var frtt = Warehouse.getTemplateByType(f.methodInfo.returnType);
var frtt = Warehouse.getTemplateByType(ft.methodInfo.returnType);
if (frtt != null)
{
if (!bag.includes(frtt))
@@ -133,11 +135,11 @@ export default class TypeTemplate {
}
}
var args = f.methodInfo.parameters;
var args = ft.methodInfo.parameters;
for(var i = 0; i < args.length - 1; i++)
for(let j = 0; j < args.length - 1; j++)
{
var fpt = Warehouse.getTemplateByType(args[i].parameterType);
var fpt = Warehouse.getTemplateByType(args[j].parameterType);
if (fpt != null)
{
if (!bag.includes(fpt))
@@ -154,7 +156,7 @@ export default class TypeTemplate {
var last = args[args.length - 1];
if (last.parameterType == DistributedConnection)
{
var fpt = Warehouse.getTemplateByType(last.parameterType);
let fpt = Warehouse.getTemplateByType(last.parameterType);
if (fpt != null)
{
if (!bag.includes(fpt))
@@ -169,7 +171,7 @@ export default class TypeTemplate {
}
// properties
for (var i = 0; i < tmp.properties.length; i++)
for (let i = 0; i < tmp.properties.length; i++)
{
var p = tmp.properties[i];
var pt = Warehouse.getTemplateByType(p.propertyInfo.propertyType);
@@ -184,7 +186,7 @@ export default class TypeTemplate {
}
// events
for(var i = 0; i < tmp.events.length; i++)
for(let i = 0; i < tmp.events.length; i++)
{
var e = tmp.events[i];
var et = Warehouse.getTemplateByType(e.eventInfo.eventHandlerType);
@@ -204,6 +206,10 @@ export default class TypeTemplate {
return list;
}
get type() {
return this.templateType;
}
constructor(type, addToWarehouse) {
@@ -257,7 +263,7 @@ export default class TypeTemplate {
if (template.events != null)
{
for (var i = 0; i < template.events.length; i++) {
for (let i = 0; i < template.events.length; i++) {
// [name, type, {listenable: true/false, help: ""}]
var ei = template.events[i];
@@ -274,7 +280,7 @@ export default class TypeTemplate {
if (template.functions != null)
{
for (var i = 0; i < template.functions.length; i++) {
for (let i = 0; i < template.functions.length; i++) {
var fi = template.functions[i];
@@ -298,13 +304,13 @@ export default class TypeTemplate {
// append signals
for (var i = 0; i < this.events.length; i++)
for (let i = 0; i < this.events.length; i++)
this.members.push(this.events[i]);
// append slots
for (var i = 0; i < this.functions.length; i++)
for (let i = 0; i < this.functions.length; i++)
this.members.push(this.functions[i]);
// append properties
for (var i = 0; i < this.properties.length; i++)
for (let i = 0; i < this.properties.length; i++)
this.members.push(this.properties[i]);
// bake it binarily
@@ -317,13 +323,13 @@ export default class TypeTemplate {
.addUint32(template.version)
.addUint16(this.members.length);
for (var i = 0; i < this.functions.length; i++)
for (let i = 0; i < this.functions.length; i++)
b.addUint8Array(this.functions[i].compose());
for (var i = 0; i < this.properties.length; i++)
for (let i = 0; i < this.properties.length; i++)
b.addUint8Array(this.properties[i].compose());
for (var i = 0; i < this.events.length; i++)
for (let i = 0; i < this.events.length; i++)
b.addUint8Array(this.events[i].compose());
this.content = b.toArray();
@@ -331,7 +337,8 @@ export default class TypeTemplate {
static getFunctionParameters(func)
{
var STRIP_COMMENTS = /(\/\/.*$)|(\/\*[\s\S]*?\*\/)|(\s*=[^,\)]*(('(?:\\'|[^'\r\n])*')|("(?:\\"|[^"\r\n])*"))|(\s*=[^,\)]*))/mg;
var STRIP_COMMENTS = /(\/\/.*$)|(\/\*[\s\S]*?\*\/)|(\s*=[^,)]*(('(?:\\'|[^'\r\n])*')|("(?:\\"|[^"\r\n])*"))|(\s*=[^,)]*))/mg;
//var STRIP_COMMENTS = /(\/\/.*$)|(\/\*[\s\S]*?\*\/)|(\s*=[^,\)]*(('(?:\\'|[^'\r\n])*')|("(?:\\"|[^"\r\n])*"))|(\s*=[^,\)]*))/mg;
var ARGUMENT_NAMES = /([^\s,]+)/g;
var fnStr = func.toString().replace(STRIP_COMMENTS, '');
@@ -354,9 +361,8 @@ export default class TypeTemplate {
if (contentLength == -1)
contentLength = data.length;
var ends = offset + contentLength;
var oOffset = offset;
//var ends = offset + contentLength;
//var oOffset = offset;
// start parsing...
@@ -385,16 +391,16 @@ export default class TypeTemplate {
if (type == 0) // function
{
var ft = new FunctionTemplate();
let ft = new FunctionTemplate();
ft.index = functionIndex++;
var hasExpansion = ((data.getUint8(offset++) & 0x10) == 0x10);
let hasExpansion = ((data.getUint8(offset++) & 0x10) == 0x10);
var len = data.getUint8(offset++);
let len = data.getUint8(offset++);
ft.name = data.getString(offset, len);
offset += len;
// return type
var {size, value: returnType} = TemplateDataType.parse(data, offset);
let {size, value: returnType} = TemplateDataType.parse(data, offset);
offset += size;
ft.returnType = returnType;
@@ -405,9 +411,9 @@ export default class TypeTemplate {
for (var a = 0; a < argsCount; a++)
{
var {size, value: argType} = ArgumentTemplate.parse(data, offset);
let {size: argSize, value: argType} = ArgumentTemplate.parse(data, offset);
args.push(argType);
offset += size;
offset += argSize;
}
ft.arguments = args;
@@ -425,17 +431,17 @@ export default class TypeTemplate {
else if (type == 1) // property
{
var pt = new PropertyTemplate();
let pt = new PropertyTemplate();
pt.index = propertyIndex++;
var hasReadExpansion = ((data.getUint8(offset) & 0x8) == 0x8);
var hasWriteExpansion = ((data.getUint8(offset) & 0x10) == 0x10);
let hasReadExpansion = ((data.getUint8(offset) & 0x8) == 0x8);
let hasWriteExpansion = ((data.getUint8(offset) & 0x10) == 0x10);
pt.recordable = ((data.getUint8(offset) & 1) == 1);
pt.permission = ((data.getUint8(offset++) >> 1) & 0x3);
var len = data.getUint8(offset++);
let len = data.getUint8(offset++);
pt.name = data.getString(offset, len);
offset += len;
var {size, value: valueType} = TemplateDataType.parse(data, offset);
let {size, value: valueType} = TemplateDataType.parse(data, offset);
offset += size;
@@ -443,7 +449,7 @@ export default class TypeTemplate {
if (hasReadExpansion) // expansion ?
{
var cs = data.getUint32(offset);
let cs = data.getUint32(offset);
offset += 4;
pt.readExpansion = data.getString(offset, cs);
offset += cs;
@@ -451,7 +457,7 @@ export default class TypeTemplate {
if (hasWriteExpansion) // expansion ?
{
var cs = data.getUint32(offset);
let cs = data.getUint32(offset);
offset += 4;
pt.writeExpansion = data.getString(offset, cs);
offset += cs;
@@ -461,23 +467,23 @@ export default class TypeTemplate {
}
else if (type == 2) // Event
{
var et = new EventTemplate();
let et = new EventTemplate();
et.index = eventIndex++;
var hasExpansion = ((data.getUint8(offset) & 0x10) == 0x10);
let hasExpansion = ((data.getUint8(offset) & 0x10) == 0x10);
et.listenable = ((data.getUint8(offset++) & 0x8) == 0x8);
var len = data.getUint8(offset++);
let len = data.getUint8(offset++);
et.name = data.getString(offset, len);
offset += len;
var {size, value: argType} = TemplateDataType.parse(data, offset);
let {size, value: argType} = TemplateDataType.parse(data, offset);
offset += size;
et.argumentType = argType;
if (hasExpansion) // expansion ?
{
var cs = data.getUint32(offset);
let cs = data.getUint32(offset);
offset += 4;
et.expansion = data.getString(offset, cs);
offset += cs;
@@ -489,13 +495,13 @@ export default class TypeTemplate {
}
// append signals
for (var i = 0; i < od.events.length; i++)
for (let i = 0; i < od.events.length; i++)
od.members.push(od.events[i]);
// append slots
for (var i = 0; i < od.functions.length; i++)
for (let i = 0; i < od.functions.length; i++)
od.members.push(od.functions[i]);
// append properties
for (var i = 0; i < od.properties.length; i++)
for (let i = 0; i < od.properties.length; i++)
od.members.push(od.properties[i]);

View File

@@ -41,6 +41,7 @@ import ResourceProxy from '../Proxy/ResourceProxy.js';
import AsyncBag from '../Core/AsyncBag.js';
import IRecord from '../Data/IRecord.js';
import TemplateType from './Template/TemplateType.js';
import DistributedResource from '../Net/IIP/DistributedResource.js';
export class WH extends IEventHandler
{
@@ -62,7 +63,9 @@ export class WH extends IEventHandler
this._register("connected");
this._register("disconnected");
///this._urlRegex = /^(?:([\S]*):\/\/([^\/]*)\/?)/;
this._urlRegex = /^(?:([^\s|:]*):\/\/([^\/]*)\/?)/;
// this._urlRegex = /^(?:([^\s|:]*):\/\/([^\/]*)\/?)/;
this._urlRegex = /^(?:([^\s|:]*):\/\/([^/]*)\/?)/;
}
newInstance(type, properties)
@@ -80,6 +83,9 @@ export class WH extends IEventHandler
var res = new proxyType();
if (properties != null)
Object.assign(res, properties);
if (properties != null)
Object.assign(res, properties);
@@ -88,7 +94,7 @@ export class WH extends IEventHandler
var rt = new AsyncReply();
this.put(name, res, store, parent, null, 0, manager, attributes)
.then((ok)=>rt.trigger(res))
.then(()=>rt.trigger(res))
.error((ex)=>rt.triggerError(ex));
return rt;
@@ -104,10 +110,10 @@ export class WH extends IEventHandler
return new AsyncReply(this.resources.item(id));
}
get(path, attributes = null, parent = null, manager = null)
get(path, attributes = null)//, parent = null, manager = null)
{
var rt = new AsyncReply();
var self = this;
// var self = this;
// Should we create a new store ?
if (path.match(this._urlRegex))
@@ -134,7 +140,7 @@ export class WH extends IEventHandler
{
if (!this.warehouseIsOpen)
{
this.open().then((ok)=>{
this.open().then(()=>{
initResource();
}).error(ex=>rt.triggerError(ex));
}
@@ -186,7 +192,7 @@ export class WH extends IEventHandler
}
if (toBeRemoved != null)
for(var i = 0; i < toBeRemoved.length; i++)
for(let i = 0; i < toBeRemoved.length; i++)
this.remove(toBeRemoved[i]);
this._emit("disconnected", resource);
@@ -231,9 +237,9 @@ export class WH extends IEventHandler
if (self.warehouseIsOpen)
{
resource.trigger(ResourceTrigger.Initialize).then(x=>{
resource.trigger(ResourceTrigger.Initialize).then(()=>{
if (resource instanceof IStore)
resource.trigger(ResourceTrigger.Open).then(y=>{ rt.trigger(true);
resource.trigger(ResourceTrigger.Open).then(()=>{ rt.trigger(true);
self._emit("connected", resource)
}).error(ex => {
Warehouse.remove(resource);
@@ -261,7 +267,7 @@ export class WH extends IEventHandler
initResource();
}
else
store.put(resource).then(ok=>{
store.put(resource).then(()=>{
initResource();
}).error(ex=> {
// failed to put
@@ -347,21 +353,21 @@ export class WH extends IEventHandler
if (templateType == TemplateType.Unspecified)
{
// look in resources
var template = templates.get(TemplateType.Resource).get(classId);
var template = this.templates.get(TemplateType.Resource).get(classId);
if (template != null)
return template;
// look in records
template = templates.get(TemplateType.Record).get(classId);
template = this.templates.get(TemplateType.Record).get(classId);
if (template != null)
return template;
// look in wrappers
template = templates.get(TemplateType.Wrapper).get(classId);
template = this.templates.get(TemplateType.Wrapper).get(classId);
return template;
}
else
return templates.get(templateType).get(classId);
return this.templates.get(templateType).get(classId);
}
getTemplateByClassName(className, templateType = TemplateType.Unspecified)
@@ -369,22 +375,22 @@ export class WH extends IEventHandler
if (templateType == TemplateType.Unspecified)
{
// look in resources
var template = templates[TemplateType.Resource].values.find(x => x.className == className);
var template = this.templates.get(TemplateType.Resource).values.find(x => x.className == className);
if (template != null)
return template;
// look in records
template = templates[TemplateType.Record].values.find(x => x.className == className);
template = this.templates.get(TemplateType.Record).values.find(x => x.className == className);
if (template != null)
return template;
// look in wrappers
template = templates[TemplateType.Wrapper].values.find(x => x.className == className);
template = this.templates.get(TemplateType.Wrapper).values.find(x => x.className == className);
return template;
}
else
{
return templates[templateType].values.find(x => x.className == className);
return this.templates.get(templateType).values.find(x => x.className == className);
}
}
@@ -395,15 +401,15 @@ export class WH extends IEventHandler
if (index == path.length - 1)
{
if (path[index] == "")
for(var i = 0; i < resources.length; i++)
for(let i = 0; i < resources.length; i++)
rt.push(resources.at(i));
else
for(var i = 0; i < resources.length; i++)
for(let i = 0; i < resources.length; i++)
if (resources.at(i).instance.name == path[index])
rt.push(resources.at(i));
}
else
for(var i = 0; i < resources.length; i++)
for(let i = 0; i < resources.length; i++)
if (resources.at(i).instance.name == path[index])
rt = rt.concat(this._qureyIn(path, index+1, resources.at(i).instance.children));
@@ -488,13 +494,13 @@ export class WH extends IEventHandler
initBag.then(ar => {
for(var i = 0; i < ar.length; i++)
for(let i = 0; i < ar.length; i++)
if (!ar[i])
console.log(`Resource failed at Initialize ${self.resources.at(i).instance.name} [${self.resources.at(i).instance.template.className}]`);
var sysBag = new AsyncBag();
for (var i = 0; i < this.resources.length; i++)
for (let i = 0; i < this.resources.length; i++)
{
var r = this.resources.at(i);
sysBag.add(r.trigger(ResourceTrigger.SystemInitialized));