First commit
This commit is contained in:
195
framework/server/objectCacheManager.js
Normal file
195
framework/server/objectCacheManager.js
Normal file
@@ -0,0 +1,195 @@
|
||||
/*
|
||||
|
||||
Copyright (c) 2020, 2023, The Unified Company.
|
||||
|
||||
This code is part of Unify.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the ESA Software Community License - Strong Copyleft LICENSE,
|
||||
as published by the ESA.
|
||||
See the ESA Software Community License - Strong Copyleft LICENSE, for more details.
|
||||
|
||||
https://unifyjs.org
|
||||
|
||||
*/
|
||||
|
||||
import unify from '../unify/unify.js';
|
||||
|
||||
import tools from '../unify/tools.js';
|
||||
|
||||
|
||||
export default class objectCacheManager{
|
||||
|
||||
|
||||
objects = new Array();
|
||||
|
||||
|
||||
removeObjectsByClientID( userID ) {
|
||||
|
||||
var objects = this.objects;
|
||||
|
||||
var entries = Object.entries( objects );
|
||||
|
||||
var count = 0;
|
||||
|
||||
var total = 0;
|
||||
|
||||
for( var b = 0; b < entries.length; b++ ) {
|
||||
|
||||
var entry = entries[b];
|
||||
|
||||
var objectsByID = Object.entries( tools.getObjectByEntry( entry ) );
|
||||
|
||||
var path = tools.getClassNameByEntry( entry );
|
||||
|
||||
var empty = true;
|
||||
|
||||
for ( var c = 0; c < objectsByID.length; c++ ) {
|
||||
|
||||
var objectsByUserID = tools.getObjectByEntry( objectsByID[c] );
|
||||
|
||||
var objectID = tools.getClassNameByEntry( objectsByID[c] );
|
||||
|
||||
total++;
|
||||
|
||||
|
||||
if( objectsByUserID[ userID ] ) {
|
||||
|
||||
delete this.objects[path][objectID][userID];
|
||||
|
||||
this.objects[path][objectID].splice( userID, 1 );
|
||||
|
||||
count++;
|
||||
|
||||
} else {
|
||||
|
||||
empty = false;
|
||||
|
||||
}
|
||||
|
||||
this.objects[path][objectID] = this.objects[path][objectID].filter(Boolean);
|
||||
|
||||
if( this.objects[path][objectID].length == 0 ) {
|
||||
|
||||
this.objects[path][objectID] = undefined;
|
||||
|
||||
empty = true;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if( empty ) {
|
||||
|
||||
delete delete this.objects[path][objectID];
|
||||
|
||||
}
|
||||
|
||||
this.objects[path] = this.objects[path].filter(Boolean);
|
||||
|
||||
|
||||
}
|
||||
|
||||
// console.log("removed ", count, "objects");
|
||||
|
||||
// console.log("total ", total, "objects");
|
||||
|
||||
}
|
||||
|
||||
addClientObjectByPathID( clientObject, id, applicationPathString, userID ) {
|
||||
|
||||
var arrayWithObjects = this.objects[ applicationPathString ];
|
||||
|
||||
if( arrayWithObjects ) {
|
||||
|
||||
var arrayWithObjectByID = arrayWithObjects[ id ];
|
||||
|
||||
if( arrayWithObjectByID ) {
|
||||
|
||||
var arrayByUserID = arrayWithObjectByID[ userID ];
|
||||
|
||||
if( arrayByUserID ) {
|
||||
|
||||
return arrayByUserID;
|
||||
|
||||
} else {
|
||||
|
||||
arrayWithObjectByID[ userID ] = clientObject;
|
||||
|
||||
// this.objects[ applicationPathString ][ id ][ userID ]
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
this.objects[ applicationPathString ][ id ] = new Array();
|
||||
|
||||
return this.addClientObjectByPathID( clientObject, id, applicationPathString, userID );
|
||||
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
this.objects[ applicationPathString ] = new Array();
|
||||
|
||||
return this.addClientObjectByPathID( clientObject, id, applicationPathString, userID );
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
getClientObjects( applicationPathString, id ) {
|
||||
|
||||
var arrayWithObjects = this.objects[ applicationPathString ];
|
||||
|
||||
if( arrayWithObjects ) {
|
||||
|
||||
var arrayWithObjectByID = arrayWithObjects[ id ];
|
||||
|
||||
if( arrayWithObjectByID ) {
|
||||
|
||||
return arrayWithObjectByID;
|
||||
|
||||
|
||||
} else {
|
||||
|
||||
return false
|
||||
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
return false;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
addClientObject( clientObject, userID ) {
|
||||
|
||||
var object = clientObject.object;
|
||||
|
||||
unify.extend(object);
|
||||
|
||||
if(object.getApplicationPathString) {
|
||||
|
||||
var applicationPathString = object.getApplicationPathString();
|
||||
var id = object.id;
|
||||
|
||||
if( !id ) {
|
||||
|
||||
id = 0;
|
||||
|
||||
}
|
||||
|
||||
var userID = userID;
|
||||
|
||||
if( object.bidirectional ) {
|
||||
|
||||
this.addClientObjectByPathID( clientObject, id, applicationPathString, userID );
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user