2
0
mirror of https://github.com/esiur/esiur-js.git synced 2025-05-06 12:32:58 +00:00
This commit is contained in:
Ahmed Zamil 2019-12-07 13:55:08 +03:00
parent 019a09d621
commit 2a99d4c04a
4 changed files with 126 additions and 18 deletions

View File

@ -298,7 +298,7 @@ export default class Codec {
static composePropertyValueArray(array, connection, prependLength = false)
{
var rt = BL();
for (var i = 0; i < array.Length; i++)
for (var i = 0; i < array.length; i++)
rt.addUint8Array(Codec.composePropertyValue(array[i], connection));
if (prependLength)
rt.addUint32(rt.length, 0);
@ -647,7 +647,7 @@ export default class Codec {
rt.addUint8(comparision);
rt.addUint8Array(Codec.composeStructure(structures[0], connection));
for (var i = 1; i < structures.Length; i++) {
for (var i = 1; i < structures.length; i++) {
comparision = Codec.compareStructure(structures[i - 1], structures[i], connection);
rt.addUint8(comparision);
@ -747,7 +747,7 @@ static isLocalResource(resource, connection) {
else if (comparsion == ResourceComparisonResult.Distributed)
rt.addUint32(resources[0].instance.id);
for (var i = 1; i < resources.Length; i++)
for (var i = 1; i < resources.length; i++)
{
comparsion = Codec.compareResource(resources[i - 1], resources[i], connection);
rt.addUint8(comparsion);

View File

@ -532,14 +532,15 @@ export default class DistributedConnection extends IStore {
unhold()
{
if (this.holdSending)
{
{
this.holdSending = false;
var msg = this.sendBuffer.read();
if (msg == null || msg.length == 0)
return;
this.socket.send(msg);
this.holdSending = false;
}
}
@ -558,17 +559,24 @@ export default class DistributedConnection extends IStore {
this.openReply = new AsyncReply();
var hostname = this.instance.name.split("://", 2)[1].split("/", 2)[0];
//var hostname = this.instance.name.split("://", 2)[1].split("/", 2)[0];
// assign domain from hostname if not provided
domain = domain ? domain : hostname.split(":")[0];
var host = this.instance.name.split(':');
var address = host[0];
var port = parseInt(host[1]);
domain = domain ? domain : address;
this.session.localAuthentication.domain = domain;
this.session.localAuthentication.username = username;
this.localPassword = DC.stringToBytes(password);
var url = `ws${secure ? 's' : ''}://${hostname}`;
var url = `ws${secure ? 's' : ''}://${this.instance.name}`;
this.debug = debug;
@ -1225,7 +1233,7 @@ export default class DistributedConnection extends IStore {
Warehouse.getById(resourceId).then(function (r) {
if (r != null) {
Codec.parseStructure(content, 0, content.Length, self).then(function (namedArgs) {
Codec.parseStructure(content, 0, content.length, self).then(function (namedArgs) {
var ft = r.instance.template.getFunctionTemplateByIndex(index);
if (ft != null) {
if (r instanceof DistributedResource) {
@ -1256,7 +1264,7 @@ export default class DistributedConnection extends IStore {
var pi = ResourceTemplate.getFunctionParameters(fi);
var args = new Array(pi.length);
for (var i = 0; i < pi.Length; i++)
for (var i = 0; i < pi.length; i++)
{
if (namedArgs[pi[i]] !== undefined)
args[i] = namedArgs[pi[i]];
@ -1894,7 +1902,7 @@ export default class DistributedConnection extends IStore {
return;
}
Codec.parseStructure(attributes, 0, attributes.Length, this).then(function(attrs) {
Codec.parseStructure(attributes, 0, attributes.length, this).then(function(attrs) {
if (r.instance.setAttributes(attrs, clearAttributes))
self.sendReply(clearAttributes ? IIPPacketAction.ClearAllAttributes : IIPPacketAction.ClearAttributes,
callback)

View File

@ -65,9 +65,62 @@ export class WH extends IEventHandler
return new AsyncReply(this.resources.item(id));
}
get(id, attributes = null, parent = null, manager = null)
get(path, attributes = null, parent = null, manager = null)
{
var rt = new AsyncReply();
var self = this;
// Should we create a new store ?
if (path.includes("://"))
{
var url = path.split("://", 2);
var hostname = url[1].split("/", 2)[0];
var pathname = url[1].split("/").splice(1).join("/");
var handler;
if (handler = this.protocols.item(url[0]))
{
var store = handler();
this.put(store, hostname, null, parent, null, 0, manager, attributes);
store.trigger(ResourceTrigger.Open).then(x => {
this.warehouseIsOpen = true;
if (pathname.length > 0 && pathname != "")
store.get(pathname).then(r => {
rt.trigger(r);
}).error(e => rt.triggerError(e));
else
rt.trigger(store);
}).error(e => {
rt.triggerError(e);
self.remove(store);
});
return rt;
}
}
this.query(path).then(rs =>
{
if (rs != null && rs.length > 0)
rt.trigger(rs[0]);
else
rt.trigger(null);
});
return rt;
/*
var p = id.split('/');
var res = null;
@ -132,6 +185,7 @@ export class WH extends IEventHandler
}
return new AsyncReply(null);
*/
}
@ -287,10 +341,56 @@ export class WH extends IEventHandler
return rt;
}
query(path)
async query(path)
{
var p = path.split('/');
return new AsyncReply(this._qureyIn(p, 0, this.stores));
//var p = path.split('/');
//return new AsyncReply(this._qureyIn(p, 0, this.stores));
var rt = new AsyncReply();
var p = path.trim().split('/');
var resource;
for(var i = 0; i < this.stores.length; i++)
{
let store = this.stores.at(i);
if (p[0] == store.instance.name)
{
if (p.length == 1)
return [store];
var res = await store.get(p.splice(1).join("/"));
if (res != null)
return [res];
resource = store;
for (var i = 1; i < p.length; i++)
{
var children = await resource.instance.children.list.filter(x=>x.instance.name == p[i]);// <IResource>(p[i]);
if (children.length > 0)
{
if (i == p.length - 1)
return children;
else
resource = children[0];
}
else
break;
}
return null;
}
}
return null;
}
}

View File

@ -1,6 +1,6 @@
{
"name": "esyur",
"version": "1.3.2",
"version": "1.3.5",
"description": "Distributed Object Framework",
"main": "esyur.js",
"scripts": {