From 44216e05debbea103708c1f28f71f3db1e9ab20b Mon Sep 17 00:00:00 2001 From: Ahmed Zamil Date: Tue, 9 Jul 2024 19:21:05 +0300 Subject: [PATCH] unnecessary deattach --- build/esiur.js | 16 ++++++++++++---- package.json | 2 +- src/Net/IIP/DistributedConnection.js | 21 ++++++++++++++------- 3 files changed, 27 insertions(+), 12 deletions(-) diff --git a/build/esiur.js b/build/esiur.js index e80fd3d..cdbb598 100644 --- a/build/esiur.js +++ b/build/esiur.js @@ -6058,9 +6058,16 @@ var DistributedConnection = exports["default"] = /*#__PURE__*/function (_IStore) key: "_sendDetachRequest", value: function _sendDetachRequest(instanceId) { try { - if ((0, _classPrivateFieldGet25["default"])(this, _attachedResources).containsKey(instanceId)) (0, _classPrivateFieldGet25["default"])(this, _attachedResources).remove(instanceId); - if ((0, _classPrivateFieldGet25["default"])(this, _suspendedResources).containsKey(instanceId)) (0, _classPrivateFieldGet25["default"])(this, _suspendedResources).remove(instanceId); - return _classPrivateMethodGet(this, _sendRequest, _sendRequest2).call(this, _IIPPacketAction["default"].DetachResource).addUint32(instanceId).done(); + var sendDetach = false; + if ((0, _classPrivateFieldGet25["default"])(this, _attachedResources).containsKey(instanceId)) { + (0, _classPrivateFieldGet25["default"])(this, _attachedResources).remove(instanceId); + sendDetach = true; + } + if ((0, _classPrivateFieldGet25["default"])(this, _suspendedResources).containsKey(instanceId)) { + (0, _classPrivateFieldGet25["default"])(this, _suspendedResources).remove(instanceId); + sendDetach = true; + } + if (sendDetach) return _classPrivateMethodGet(this, _sendRequest, _sendRequest2).call(this, _IIPPacketAction["default"].DetachResource).addUint32(instanceId).done(); } catch (ex) { return null; } @@ -6134,8 +6141,9 @@ var DistributedConnection = exports["default"] = /*#__PURE__*/function (_IStore) value: function IIPEventResourceDestroyed(resourceId) { if ((0, _classPrivateFieldGet25["default"])(this, _attachedResources).contains(resourceId)) { var r = (0, _classPrivateFieldGet25["default"])(this, _attachedResources).get(resourceId).deref(); - r === null || r === void 0 || r.destroy(); + // remove from attached to avoid sending unnecessary deattach request when destroy() is called (0, _classPrivateFieldGet25["default"])(this, _attachedResources).remove(resourceId); + r === null || r === void 0 || r.destroy(); } else if ((0, _classPrivateFieldGet25["default"])(this, _neededResources).contains(resourceId)) { // @TODO: handle this mess (0, _classPrivateFieldGet25["default"])(this, _neededResources).remove(resourceId); diff --git a/package.json b/package.json index 7c6f9be..3b8223e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "esiur", - "version": "2.3.0", + "version": "2.3.1", "description": "Distributed Object Framework", "main": "esiur.js", "type": "module", diff --git a/src/Net/IIP/DistributedConnection.js b/src/Net/IIP/DistributedConnection.js index 9b7976d..e491147 100644 --- a/src/Net/IIP/DistributedConnection.js +++ b/src/Net/IIP/DistributedConnection.js @@ -1693,15 +1693,22 @@ export default class DistributedConnection extends IStore { { try { - if (this.#attachedResources.containsKey(instanceId)) + let sendDetach = false; + + if (this.#attachedResources.containsKey(instanceId)){ this.#attachedResources.remove(instanceId); + sendDetach = true; + } - if (this.#suspendedResources.containsKey(instanceId)) + if (this.#suspendedResources.containsKey(instanceId)){ this.#suspendedResources.remove(instanceId); + sendDetach = true; + } - return this.#sendRequest(IIPPacketAction.DetachResource) - .addUint32(instanceId) - .done(); + if (sendDetach) + return this.#sendRequest(IIPPacketAction.DetachResource) + .addUint32(instanceId) + .done(); } catch(ex) { @@ -1832,9 +1839,9 @@ export default class DistributedConnection extends IStore { if (this.#attachedResources.contains(resourceId)) { let r = this.#attachedResources.get(resourceId).deref(); - r?.destroy(); - + // remove from attached to avoid sending unnecessary deattach request when destroy() is called this.#attachedResources.remove(resourceId); + r?.destroy(); } else if (this.#neededResources.contains(resourceId)) {