From 1485f348de401840351a11bef78c3357d073d54d Mon Sep 17 00:00:00 2001 From: Roland Bengtsson Date: Sat, 7 Dec 2024 12:25:42 +0200 Subject: [PATCH] Fix potential bug in case of exception receiving from BoldLinks and introduce new event beLinkObjectEstablished. #20 --- Source/BoldLinks.pas | 32 ++++++++++++++++---------------- Source/BoldSubscription.pas | 3 ++- 2 files changed, 18 insertions(+), 17 deletions(-) diff --git a/Source/BoldLinks.pas b/Source/BoldLinks.pas index 4826840..68c9d2e 100644 --- a/Source/BoldLinks.pas +++ b/Source/BoldLinks.pas @@ -637,11 +637,11 @@ procedure TBoldDirectMultiLinkController.AddLocator(Locator: TBoldObjectLocator) OtherEndController.SetAndModifyOrderNo(LocatorList.IndexOf(Locator)); EndModify; BoldSystem.CommitTransaction; - Changed(beItemAdded, [Locator]); except BoldSystem.RollbackTransaction; raise; end; + Changed(beItemAdded, [Locator]); end; constructor TBoldDirectMultiLinkController.Create(OwningList: TBoldObjectList); @@ -806,11 +806,11 @@ procedure TBoldDirectMultiLinkController.InsertLocator(index: Integer; Locator: ReOrder; EndModify; BoldSystem.CommitTransaction; - Changed(beItemAdded, [Locator]); except BoldSystem.RollbackTransaction; raise; end; + Changed(beItemAdded, [Locator]); end; procedure TBoldDirectMultiLinkController.LinkTo(NewLocator: TBoldObjectLocator; updateOrderNo: Boolean; Mode: TBoldLinkUnlinkMode) ; @@ -836,11 +836,11 @@ procedure TBoldDirectMultiLinkController.LinkTo(NewLocator: TBoldObjectLocator; if Mode = blulMarkModified then EndModify; BoldSystem.CommitTransaction; - Changed(beItemAdded, [NewLocator]); except BoldSystem.RollbackTransaction; raise; end; + Changed(beItemAdded, [NewLocator]); end; procedure TBoldDirectMultiLinkController.Move(CurrentIndex, NewIndex: Integer); @@ -859,14 +859,13 @@ procedure TBoldDirectMultiLinkController.Move(CurrentIndex, NewIndex: Integer); ReOrder; EndModify; BoldSystem.CommitTransaction; - Changed(beOrderChanged, []); except BoldSystem.RollbackTransaction; raise; end; + Changed(beOrderChanged, []); end; - procedure TBoldDirectMultiLinkController.RemoveByIndex(index: Integer); var Locator: TBoldObjectLocator; @@ -885,7 +884,7 @@ procedure TBoldDirectMultiLinkController.RemoveByIndex(index: Integer); ReOrder; EndModify; Changed(beItemDeleted, [Locator]); - BoldSystem.CommitTransaction; + BoldSystem.CommitTransaction; except BoldSystem.RollbackTransaction; raise; @@ -1109,11 +1108,11 @@ procedure TBoldDirectMultiLinkController.SetLocator(index: Integer; Locator: TBo ReOrder; EndModify; BoldSystem.CommitTransaction; - Changed(beItemReplaced, [Locator, Index]); except BoldSystem.RollbackTransaction; raise; end; + Changed(beItemReplaced, [Locator, Index]); end; function TBoldDirectMultiLinkController.GetStreamName: String; @@ -1559,11 +1558,11 @@ procedure TBoldDirectSingleLinkController.SetLocator(NewLocator: TBoldObjectLoca SetAndModifyOrderNo(-1); EndModify; BoldSystem.CommitTransaction; - Changed(beValueChanged, [NewLocator]); except BoldSystem.RollbackTransaction; raise; end; + Changed(beValueChanged, [NewLocator]); end; procedure TBoldDirectSingleLinkController.InternalSetLocator(NewLocator: TBoldObjectLocator); @@ -1987,12 +1986,12 @@ procedure TBoldIndirectSingleLinkController.SetLocator(NewLocator: TBoldObjectLo fLinkObjectLocator := nil; EndModify; BoldSystem.CommitTransaction; - Changed(beValueChanged, [NewLocator]); - GetLinkObjectRoleController.Changed(beValueChanged, [fLinkObjectLocator]); except BoldSystem.RollbackTransaction; raise; end; + Changed(beValueChanged, [NewLocator]); + GetLinkObjectRoleController.Changed(beValueChanged, [fLinkObjectLocator]); end; function TBoldIndirectSingleLinkController.GetStreamName: String; @@ -2111,12 +2110,13 @@ procedure TBoldIndirectMultiLinkController.AddLocator(Locator: TBoldObjectLocato GetLinkObjectOwnLinkController(LinkObject).SetAndModifyOrderNo(LinkLocatorList.IndexOf(LinkObject.BoldObjectLocator)); EndModify; BoldSystem.CommitTransaction; - Changed(beItemAdded, [Locator]); - GetLinkObjectListController.Changed(beItemAdded, [LinkObject.BoldObjectLocator]); except BoldSystem.RollbackTransaction; raise; end; + Changed(beItemAdded, [Locator]); + GetLinkObjectListController.Changed(beItemAdded, [LinkObject.BoldObjectLocator]); + LinkObject.SendEvent(beLinkObjectEstablished); end; constructor TBoldIndirectMultiLinkController.Create(OwningList: TBoldObjectList); @@ -2307,12 +2307,12 @@ procedure TBoldIndirectMultiLinkController.InsertLocator(index: Integer; Locator ReOrder; EndModify; BoldSystem.CommitTransaction; - Changed(beItemAdded, [Locator]); - GetLinkObjectListController.Changed(beItemAdded, [NewLinkLocator]); except BoldSystem.RollbackTransaction; raise; end; + Changed(beItemAdded, [Locator]); + GetLinkObjectListController.Changed(beItemAdded, [NewLinkLocator]); end; procedure TBoldIndirectMultiLinkController.LinkTo(NewLocator: TBoldObjectLocator; updateOrderNo: Boolean; Mode: TBoldLinkUnlinkMode); @@ -2367,12 +2367,12 @@ procedure TBoldIndirectMultiLinkController.Move(CurrentIndex, NewIndex: Integer) ReOrder; EndModify; BoldSystem.CommitTransaction; - Changed(beOrderChanged, []); - GetLinkObjectListController. Changed(beOrderChanged, []); except BoldSystem.RollbackTransaction; raise; end; + Changed(beOrderChanged, []); + GetLinkObjectListController. Changed(beOrderChanged, []); end; function TBoldIndirectMultiLinkController.NewLink(OtherLocator: TBoldObjectLocator; Mode: TBoldLinkUnlinkMode): TBoldObject; diff --git a/Source/BoldSubscription.pas b/Source/BoldSubscription.pas index ccef2c7..dc5844e 100644 --- a/Source/BoldSubscription.pas +++ b/Source/BoldSubscription.pas @@ -43,11 +43,12 @@ interface bePreUpdateId = 18; beObjectFetched = 19; beObjectUnloaded = 20; // sent by TBoldSystem before an object gets unloaded from memory + beLinkObjectEstablished = 21; breReEvaluate = beValueChanged; {backwards compatibility} beDefaultRequestedEvent = breReEvaluate; - beServerSubscriberRemoved = 21; +// beServerSubscriberRemoved = 21; // Depricated - Only used in BoldCom Client/Server beBeginUpdate = 22; // sent by TBoldObjectList before loops beEndUpdate = 23; // sent by TBoldObjectList after loops