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 2022-03-13 12:44:13 +03:00
parent 15eb1453e7
commit c03112d96c
17 changed files with 277 additions and 13049 deletions

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,6 @@
{
"name": "esiur",
"version": "2.0.0",
"version": "2.0.1",
"description": "Distributed Object Framework",
"main": "esiur.js",
"type": "module",

File diff suppressed because it is too large Load Diff

View File

@ -1,116 +0,0 @@
/*
* Copyright (c) 2017 Ahmed Kh. Zamil
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
/**
* Created by Ahmed Zamil on 25/07/2017.
*/
"use strict";
export default
{
Void: 0x0,
//Variant,
Bool: 1,
Int8: 2,
UInt8: 3,
Char: 4,
Int16: 5,
UInt16: 6,
Int32: 7,
UInt32: 8,
Int64: 9,
UInt64: 10,
Float32: 11,
Float64: 12,
Decimal: 13,
DateTime: 14,
Resource: 15,
DistributedResource: 16,
ResourceLink: 17,
String: 18,
Structure: 19,
Record: 20,
//Stream,
//Array = 0x80,
VarArray: 0x80,
BoolArray: 0x81,
Int8Array: 0x82,
UInt8Array: 0x83,
CharArray: 0x84,
Int16Array: 0x85,
UInt16Array: 0x86,
Int32Array: 0x87,
UInt32Array: 0x88,
Int64Array: 0x89,
UInt64Array: 0x8A,
Float32Array: 0x8B,
Float64Array: 0x8C,
DecimalArray: 0x8D,
DateTimeArray: 0x8E,
ResourceArray: 0x8F,
DistributedResourceArray: 0x90,
ResourceLinkArray: 0x91,
StringArray: 0x92,
StructureArray: 0x93,
RecordArray: 0x94,
NotModified: 0x7f,
Unspecified: 0xff,
isArray: function(type)
{
return ((type & 0x80) == 0x80) && (type != this.NotModified);
},
sizeOf: function(type)
{
switch (type)
{
case this.Void:
case this.NotModified:
return 0;
case this.Bool:
case this.Int8:
case this.UInt8:
return 1;
case this.Char:
case this.Int16:
case this.UInt16:
return 2;
case this.Int32:
case this.UInt32:
case this.Float32:
case this.Resource:
return 4;
case this.Int64:
case this.UInt64:
case this.Float64:
case this.DateTime:
return 8;
case this.DistributedResource:
return 4;
default:
return -1;
}
}
};

View File

@ -1,8 +0,0 @@
export default // const ResourceComparisonResult =
{
Null: 0,
Record: 1,
RecordSameType: 2,
Same: 3,
Empty: 4
};

View File

@ -1,8 +0,0 @@
export default // const ResourceComparisonResult =
{
Null: 0,
Distributed: 1,
Local: 2,
Same: 3,
Empty: 4
};

View File

@ -1,67 +0,0 @@
/*
* Copyright (c) 2017 Ahmed Kh. Zamil
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
/**
* Created by Ahmed Zamil on 26/08/2017.
*/
"use strict";
export default class Structure
{
toArray() {
return this.toPairs();
}
toPairs() {
var rt = [];
for (var i in this)
if (!(this[i] instanceof Function))
rt.push({ key: i, value: this[i]});
return rt;
}
getKeys() {
var rt = [];
for (var i in this)
if (!(this[i] instanceof Function))
rt.push(i);
return rt;
}
toObject()
{
var rt = {};
for (var i in this)
if (!(this[i] instanceof Function))
rt[i] = this[i];
return rt;
}
constructor(data)
{
if (data instanceof Object)
for(var i in data)
this[i] = data[i];
}
}

View File

@ -1,39 +0,0 @@
/*
* Copyright (c) 2017 Ahmed Kh. Zamil
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
/**
* Created by Ahmed Zamil on 06/09/2017.
*/
"use strict";
export default class StructureArray extends Array
{
push(value)
{
if (value instanceof Structure)
super.push(value);
else
return;
}
}

View File

@ -1,9 +0,0 @@
export default //const StructureComparisonResult =
{
Null: 0,
Structure: 1,
StructureSameKeys: 2,
StructureSameTypes: 3,
Same: 4
};

View File

@ -1,6 +1,9 @@
import IResource from "../Resource/IResource.js";
import IRecord from "./IRecord.js";
import Record from "./Record.js";
import PropertyValue from "./PropertyValue.js";
import PropertyValueArray from "./PropertyValueArray.js";
import RecordArray from "./RecordArray.js";
import ResourceArray from "./ResourceArray.js";
export default class TypedList extends Array
@ -14,7 +17,9 @@ export default class TypedList extends Array
// }
static cache = { [IResource] : ResourceArray,
[PropertyValue] : PropertyValueArray
[PropertyValue] : PropertyValueArray,
[IRecord] : RecordArray,
[Record] : RecordArray
};
static getType(typedList){

View File

@ -28,13 +28,6 @@
import IResource from '../../Resource/IResource.js';
import AsyncReply from '../../Core/AsyncReply.js';
import Codec from '../../Data/Codec.js';
import Structure from '../../Data/Structure.js';
import IIPPacketAction from '../Packets//IIPPacketAction.js';
import EventTemplate from '../../Resource/Template/EventTemplate.js';
import AsyncException from '../../Core/AsyncException.js';
import ExceptionCode from '../../Core//ExceptionCode.js';
import ErrorType from '../../Core/ErrorType.js';
import DistributedConnection from './DistributedConnection.js';
export default class DistributedServer extends IResource

View File

@ -30,7 +30,6 @@ import IIPPacketAction from "./IIPPacketAction.js";
import IIPPacketCommand from "./IIPPacketCommand.js";
import IIPPacketEvent from "./IIPPacketEvent.js";
import IIPPacketReport from "./IIPPacketReport.js";
import DataType from '../../Data/DataType.js';
import TransmissionType from '../../Data/TransmissionType.js';
export default class IIPPacket

View File

@ -30,7 +30,6 @@ import IEventHandler from '../Core/IEventHandler.js';
import IPermissionsManager from '../Security/Permissions/IPermissionsManager.js';
import AutoList from '../Data/AutoList.js';
import KeyList from '../Data/KeyList.js';
import Structure from '../Data/Structure.js';
import PropertyValue from '../Data/PropertyValue.js';
import CustomResourceEvent from './CustomResourceEvent.js';
import Warehouse from './Warehouse.js';
@ -293,7 +292,7 @@ export default class Instance extends IEventHandler
getAttributes(attributes = null)
{
var st = new Structure();
var st = new (TypedMap.of(String, Object))();
if (attributes == null)
{
@ -306,7 +305,7 @@ export default class Instance extends IEventHandler
var attr = attributes[i];
if (attr == "name")
st["name"] = this.name;
st.set("name", this.name);
else if (attr == "managers")
{
@ -322,11 +321,11 @@ export default class Instance extends IEventHandler
mngrs.push(sm);
}
st["managers"] = mngrs;
st.set("managers", mngrs);
}
else
st[attr] = this.attributes.item(attr);
st.set(attr, this.attributes.item(attr));
}
return st;

View File

@ -1,137 +0,0 @@
/*
* Copyright (c) 2017 Ahmed Kh. Zamil
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
"use strict";
import {DC, BL} from '../../Data/DC.js';
import DataType from "../../Data/DataType.js";
import Structure from '../../Data/Structure.js';
import IResource from '../IResource.js';
import TypeTemplate from './TypeTemplate.js';
import IRecord from '../../Data/IRecord.js';
export default class TemplateDataType
{
static typesDefinitions = [
"var",
"bool",
"sbyte",
"byte",
"char",
"short",
"ushort",
"int",
"uint",
"long",
"ulong",
"float",
"double",
"decimal",
"date",
"resource",
"DistributedResource",
"ResourceLink",
"string",
"structure"
];
get typeTemplate() {
return this.typeGuid == null ? null : Warehouse.getTemplateByType(this.typeGuid);
}
//@TODO: implement this
static fromType(type)
{
var isArray = type instanceof Array;
if (isArray)
type = type[0]
var dataType = 0;
var typeGuid = null;
if (!isNaN(type))
dataType = type;
else if (type == Structure)
dataType = DataType.Structure;
else if (typeof type == "string")
{
var tIndex = this.typesDefinitions.indexOf(type);
dataType = tIndex > -1 ? tIndex : 0;
}
else if (type?.prototype instanceof IResource)
{
dataType = DataType.Resource;
typeGuid = TypeTemplate.getTypeGuid(type);
}
else if (type?.prototype instanceof IRecord)
{
dataType = DataType.Record;
typeGuid = TypeTemplate.getTypeGuid(type);
}
if (isArray)
dataType |= DataType.VarArray;
return new TemplateDataType(DataType.StructureArray);
}
compose()
{
if (this.type == DataType.Resource ||
this.type == DataType.ResourceArray ||
this.type == DataType.Record ||
this.type == DataType.RecordArray)
{
return BL()
.addUint8(this.type)
.addUint8Array(this.typeGuid)
.toDC();
}
else
return DC.from([this.type]);
}
constructor(type, guid){
this.type = type;
this.typeGuid = guid;
}
static parse(data, offset)
{
var type = data.getUint8(offset++);
if (type == DataType.Resource ||
type == DataType.ResourceArray ||
type == DataType.Record ||
type == DataType.RecordArray)
{
var guid = data.getGuid(offset);
return {size: 17, value: new TemplateDataType(type, guid)};
}
else
return {size: 1, value: new TemplateDataType(type)};
}
}

View File

@ -29,12 +29,13 @@
import { ResourceTrigger } from '../Resource/IResource.js';
import IStore from '../Resource/IStore.js'
import AsyncReply from '../Core/AsyncReply.js';
import Codec from '../Data/Codec.js';
import Warehouse from '../Resource/Warehouse.js';
import DataType from '../Data/DataType.js';
import AsyncBag from '../Core/AsyncBag.js';
import ErrorType from '../Core/ErrorType.js';
import ExceptionCode from '../Core/ExceptionCode.js';
import {RepresentationType, RepresentationTypeIdentifier} from '../Data/RepresentationType.js';
import TypedMap from '../Data/TypedMap.js';
import ResourceProxy from '../Proxy/ResourceProxy.js';
export default class IndexedDBStore extends IStore
{
@ -47,32 +48,33 @@ export default class IndexedDBStore extends IStore
compose(value)
{
let type = Codec.getDataType(value, null);
let type = RepresentationType.fromType(value);
switch (type)
switch (type.identifier)
{
case DataType.Void:
case RepresentationTypeIdentifier.Void:
// nothing to do;
return null;
case DataType.String:
case RepresentationTypeIdentifier.String:
return value;
case DataType.Resource:
case DataType.DistributedResource:
case RepresentationTypeIdentifier.Resource:
case RepresentationTypeIdentifier.DistributedResource:
return { "type": 0 , "link": value.instance.link };
case DataType.Structure:
return this.composeStructure(value);
case RepresentationTypeIdentifier.Map:
return this.composeMap(value);
case DataType.VarArray:
return this.composeVarArray(value);
case RepresentationTypeIdentifier.List:
return this.composeList(value);
case DataType.ResourceArray:
return this.composeResourceArray(value);
// case RepresentationTypeIdentifier.List:
// return this.composeResourceArray(value);
case DataType.StructureArray:
return this.composeStructureArray(value);
//case RepresentationTypeIdentifier.Typed:
// return this.composeStructureArray(value);
default:
return value;
@ -103,7 +105,7 @@ export default class IndexedDBStore extends IStore
var bag = new AsyncBag();
var rt = new AsyncReply();
let s = new Structure();
let s = new (TypedMap.of(String, Object))();
for (let i = 0; i < value.values.length; i++)
bag.add(this.parse(value.values[i].value));
@ -112,7 +114,7 @@ export default class IndexedDBStore extends IStore
bag.then((x) =>
{
for (let i = 0; i < x.length; i++)
s[value.values[i].name] = x[i];
s.set(value.values[i].name, x[i]);
rt.trigger(s);
});
@ -190,7 +192,7 @@ export default class IndexedDBStore extends IStore
var bag = new AsyncBag();
for(var i = 0; i < doc.values.length; i++)
for(let i = 0; i < doc.values.length; i++)
{
let v = doc.values[i];
@ -347,12 +349,15 @@ export default class IndexedDBStore extends IStore
}
composeStructure(value)
composeMap(value)
{
return {type: 1, values: value.toObject()};
var values = {};
for(let [k,v] of value)
values[[k]] = v;
return {type: 1, values};
}
composeVarArray(array)
composeList(array)
{
var rt = [];
@ -361,25 +366,25 @@ export default class IndexedDBStore extends IStore
return rt;
}
composeStructureArray(structures)
{
var rt = [];
// composeStructureArray(structures)
// {
// var rt = [];
if (structures == null || structures.length == 0)
return rt;
// if (structures == null || structures.length == 0)
// return rt;
for(var i = 0; i < structures.length; i++)
rt.push(this.composeStructure(structures[s]));
// for(var i = 0; i < structures.length; i++)
// rt.push(this.composeStructure(structures[s]));
return rt;
}
// return rt;
// }
composeResourceArray(array)
{
var rt = [];
for (var i = 0; i < array.length; i++)
rt.push({ "type": 0 , "link": array[i].instance.link });
return rt;
}
// composeResourceArray(array)
// {
// var rt = [];
// for (var i = 0; i < array.length; i++)
// rt.push({ "type": 0 , "link": array[i].instance.link });
// return rt;
// }
}

View File

@ -1,5 +1,7 @@
import Structure from './Data/Structure.js';
import TypedMap from './Data/TypedMap.js';
import TypedList from './Data/TypedList.js';
import DistributedResource from './Net/IIP/DistributedResource.js'
import MemoryStore from './Stores/MemoryStore.js';
import IndexedDBStore from './Stores/IndexedDBStore.js';
@ -26,19 +28,14 @@ import AutoMap from './Data/AutoMap.js';
import BinaryList from './Data/BinaryList.js';
import Codec from './Data/Codec.js';
import DC from './Data/DC.js';
import DataType from './Data/DataType.js';
import Guid from './Data/Guid.js';
import IRecord from './Data/IRecord.js';
import KeyList from './Data/KeyList.js';
import NotModified from './Data/NotModified.js';
import PropertyValue from './Data/PropertyValue.js';
import Record from './Data/Record.js';
import ResourceComparisonResult from './Data/ResourceComparisonResult.js';
import ResourceArrayType from './Data/ResourceArrayType.js';
import ResourceArray from './Data/ResourceArray.js';
import RecordComparisonResult from './Data/RecordComparisonResult.js';
import StructureComparisonResult from './Data/StructureComparisonResult.js';
import StructureArray from './Data/StructureArray.js';
import INetworkReceiver from './Net/INetworkReceiver.js';
import NetworkBuffer from './Net/NetworkBuffer.js';
import NetworkConnections from './Net/NetworkConnections.js';
@ -67,10 +64,12 @@ import FunctionTemplate from './Resource/Template/FunctionTemplate.js';
import MemberTemplate from './Resource/Template/MemberTemplate.js';
import MemberType from './Resource/Template/MemberType.js';
import PropertyTemplate from './Resource/Template/PropertyTemplate.js';
import TemplateDataType from './Resource/Template/TemplateDataType.js';
import TemplateType from './Resource/Template/TemplateType.js';
import TypeTemplate from './Resource/Template/TypeTemplate.js';
import {RepresentationType, RepresentationTypeIdentifier} from './Data/RepresentationType.js';
import {TransmissionType, TransmissionTypeIdentifier} from './Data/TransmissionType.js';
import Authentication from './Security/Authority/Authentication.js';
import AuthenticationMethod from './Security/Authority/AuthenticationMethod.js';
import AuthenticationType from './Security/Authority/AuthenticationType.js';
@ -84,11 +83,14 @@ import ActionType from './Security/Permissions/ActionType.js';
import IPermissionsManager from './Security/Permissions/IPermissionsManager.js';
import Ruling from './Security/Permissions/Ruling.js';
import { Int8, UInt8, Int16, UInt16, Int32, UInt32, Int64, UInt64, Int128, UInt128, Float32, Float64, Float128, Char16, Char8 } from './Data/ExtendedTypes.js';
let namespace = {
Core: { AsyncReply, AsyncException, AsyncQueue, ErrorType, ExceptionCode, IDestructible, IEventHandler, ProgressType},
Data: {AutoList, AutoMap, BinaryList, Codec, DC, DataType, Guid, IRecord, KeyList, NotModified,
PropertyValue, Record, RecordComparisonResult, ResourceArray, ResourceArrayType, ResourceComparisonResult, Structure,
StructureArray, StructureComparisonResult },
Data: {AutoList, AutoMap, BinaryList, Codec, DC, TypedList, TypedMap, Guid, IRecord, KeyList, NotModified,
PropertyValue, Record, ResourceArray, RepresentationType, RepresentationTypeIdentifier, TransmissionType, TransmissionTypeIdentifier,
Int8, UInt8, Int16, UInt16, Int32, UInt32, Int64, UInt64, Int128, UInt128, Float32, Float64, Float128, Char16, Char8
},
Net: {INetworkReceiver, NetworkBuffer, NetworkConnections, NetworkServer, NetworkSession, SendList,
IIP: {DistributedConnection, DistributedPropertyContext, DistributedResource, DistributedResourceQueueItem,
DistributedResourceQueueItemType, DistributedServer, EntryPoint},
@ -100,7 +102,7 @@ let namespace = {
Resource: {CustomResourceEvent, Instance, IResource, IStore, Warehouse,
Template: {
ArgumentTemplate, EventTemplate, FunctionTemplate, MemberTemplate,
MemberType, PropertyTemplate, TemplateDataType, TemplateType, TypeTemplate
MemberType, PropertyTemplate, TemplateType, TypeTemplate
}
},
Security: {
@ -118,7 +120,8 @@ let namespace = {
if (typeof window !== 'undefined')
{
window.wh = Warehouse;
window.Structure = Structure;
window.TypedMap = TypedMap;
window.TypedList = TypedList;
window.DistributedResource = DistributedResource;
window.MemoryStore = MemoryStore;
window.IndexedDBStore = IndexedDBStore;
@ -131,7 +134,8 @@ if (typeof window !== 'undefined')
else if (typeof global !== 'undefined')
{
global.wh = Warehouse;
global.Structure = Structure;
global.TypedMap = TypedMap;
global.TypedList = TypedList;
global.DistributedResource = DistributedResource;
global.MemoryStore = MemoryStore;
global.IndexedDBStore = IndexedDBStore;