HEX
Server: Apache/2.4.63 (Unix)
System: Linux Synopilou92 4.4.302+ #72806 SMP Mon Jul 21 23:16:00 CST 2025 x86_64
User: pilou92 (1026)
PHP: 8.0.30
Disabled: NONE
Upload Files
File: /volume1/@appstore/Spreadsheet/server/common/base/instance.js
"use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"default",{enumerable:true,get:function(){return n}});const e=require("../helper");const t=o(require("../guest-manager"));const s=o(require("./path"));const i=require("../collab/Constants");const r=require("../../cluster");function o(e){return e&&e.__esModule?e:{default:e}}const a=6e5;class h{constructor(e,i,o){this.objectId=e;this.clientMap=new Map;this.path=new s.default;this.removed=false;this.password=i||"";this.guestMgr=new t.default;this.app=o;this.isCheckedOFile=false;this.clusterMgr=new r.ClusterMgr;this.destroyPromise=null;this.delayDestroyTimer=undefined;this.forceDestroyPromise=null}getApp(){return this.app}getSocketServer(){return this.getApp().ioServer.getIO()}registerClient(e){e.socket.join(this.objectId);this.clientMap.set(e.id,e);this.unDelayDestroy()}unregisterClient(e){this.clientMap.delete(e.id);e.socket.leave(this.objectId);this.delayDestroy()}isReadyToDestroy(){if(0!==this.getClientCount()){return false}if(this.isSnapshotScheduled()&&this.isSnapshotable()){return false}return true}async delayDestroy(){if(!this.isReadyToDestroy()){return}await new Promise((e=>{clearTimeout(this.delayDestroyTimer);this.delayDestroyTimer=setTimeout(e,a)}));this.delayDestroyTimer=undefined;if(!this.isReadyToDestroy()){return}await this.waitSnapshottingAndFlushCommand();if(!this.isReadyToDestroy()){return}if(this.forceDestroyPromise){await this.forceDestroyPromise}else if(this.destroyPromise){await this.destroyPromise}else{this.destroyPromise=this.destroy(false).catch((()=>{}));await this.destroyPromise}}unDelayDestroy(){if(this.delayDestroyTimer){clearTimeout(this.delayDestroyTimer);this.delayDestroyTimer=undefined}}setPassword(e){this.password=e||""}getPassword(){return this.password}setFileInfo(t){if((0,e.isFile)(this.objectId)&&t){const{path:e,removed:s}=t;this._checkPath(e);this.setPath(e);this.setRemoved(s)}}checkFileInfo(t,s){if((0,e.isFile)(this.objectId)&&t){this.setFileInfo(t);this.migrateToOFile(t,s)}}migrateToOFile(t,s){if(this.isCheckedOFile||s===i.GUEST_UID||!(0,e.isFile)(this.objectId)||!t||t.removed||t.is_ofile){return}(0,e.generateOFileAsync)(this.objectId,[],this.getPassword());this.isCheckedOFile=true}getClient(e){return this.clientMap.get(e)}hasClient(e){return this.clientMap.has(e)}listClients(e=true){const t=Array.from(this.clientMap.values());if(!e){return t}return t.filter((e=>e.isConnected()))}getClientCount(){return this.clientMap.size}setPath(e){this.path.set(e)}getPath(){return this.path.get()}setRemoved(e){this.removed=e}isRemoved(){return this.removed}updateName(e){if(this.isRemoved()){return}this.path.updateName(e)}updatePath(e,t){if(this.isRemoved()){return}this.path.updatePath(e,t)}_checkPath(e){const t=this.path.get();if(t&&e!==t){this.getApp().onCheckPerm([this.objectId])}}addGuest(e){return this.guestMgr.add(e)}removeGuest(e){return this.guestMgr.remove(e)}broadcastByClients(e,t,...s){if(e.length===0){return}const i=e.map((e=>e.id));this.getSocketServer().to(i).emit(t,...s)}broadcastAll(e,...t){for(const s of this.listClients()){s.emit(e,...t)}}async lock(e){return await this.clusterMgr.lock({path:this.getPath(),objectId:this.objectId,retry:e})}async doUnLock(){await this.clusterMgr.unlock({objectId:this.objectId}).catch((()=>{}))}clearTimer(){this.unDelayDestroy()}async forceDestroy(e){if(!this.forceDestroyPromise){this.forceDestroyPromise=this.forceDestroyPromiseFn(e)}await this.forceDestroyPromise}async forceDestroyPromiseFn(e){this.clearTimer();this.getApp().kick([this.objectId],{reason:e});await this.waitSnapshottingAndFlushCommand();await this.destroy(true).catch((()=>{}))}async postDestroy(){await this.doUnLock();this.getApp().removeInstance(this.objectId)}isDestroying(){return!!this.forceDestroyPromise||!!this.destroyPromise}async waitDestroying(){await Promise.all([this.forceDestroyPromise,this.destroyPromise])}}const n=h;