Skip to content

Commit 3fa972c

Browse files
authored
161 new feature rcc should request state change when any of the parameters changes (#166)
* auto polling in now triggered from base ReanderableComponent --------- Co-authored-by: PTKu <[email protected]>
1 parent af8e653 commit 3fa972c

File tree

4 files changed

+33
-33
lines changed

4 files changed

+33
-33
lines changed

src/AXSharp.blazor/src/AXSharp.Presentation.Blazor.Controls/RenderableContent/RenderableComplexComponentBase.cs

Lines changed: 2 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -17,26 +17,11 @@
1717
namespace AXSharp.Presentation.Blazor.Controls.RenderableContent
1818
{
1919
/// <summary>
20-
/// Base class for complex componenets with only code-behind.
20+
/// Base class for complex components with only code-behind.
2121
/// </summary>
22-
public class RenderableComplexComponentBase<T> : RenderableComponentBase,
23-
IRenderableComplexComponentBase,
24-
IDisposable
22+
public class RenderableComplexComponentBase<T> : RenderableComponentBase, IRenderableComplexComponentBase
2523
{
2624
[Parameter]
2725
public T Component { get; set; }
28-
29-
[Parameter] public int PollingInterval { get; set; } = 250;
30-
31-
protected override void OnInitialized()
32-
{
33-
base.OnInitialized();
34-
(Component as ITwinElement)?.StartPolling(PollingInterval);
35-
}
36-
37-
public virtual void Dispose()
38-
{
39-
(Component as ITwinElement)?.StopPolling();
40-
}
4126
}
4227
}

src/AXSharp.blazor/src/AXSharp.Presentation.Blazor.Controls/RenderableContent/RenderableComponentBase.cs

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,45 +5,70 @@
55
// https://github.com/ix-ax/axsharp/blob/dev/LICENSE
66
// Third party licenses: https://github.com/ix-ax/axsharp/blob/master/notices.md
77

8+
using System;
9+
using System.Collections.Generic;
810
using System.ComponentModel;
11+
using System.Linq;
912
using System.Threading.Tasks;
1013
using Microsoft.AspNetCore.Components;
1114
using AXSharp.Connector;
1215
using AXSharp.Connector.ValueTypes;
1316
using AXSharp.Presentation.Blazor.Interfaces;
1417
using AXSharp.Connector.ValueTypes.Online;
18+
using System.Xml.Linq;
1519

1620
namespace AXSharp.Presentation.Blazor.Controls.RenderableContent
1721
{
1822
/// <summary>
1923
/// Base class which implements methods to update UI when PLC values are changed.
2024
/// </summary>
21-
public partial class RenderableComponentBase : ComponentBase, IRenderableComponent
25+
public partial class RenderableComponentBase : ComponentBase, IRenderableComponent, IDisposable
2226
{
27+
[Parameter] public int PollingInterval { get; set; }
28+
29+
///<inheritdoc/>
30+
public virtual void Dispose()
31+
{
32+
PolledElements.ForEach(p =>
33+
{
34+
p.StopPolling();
35+
});
36+
37+
PolledElements.Clear();
38+
}
39+
40+
private List<ITwinElement> PolledElements { get; } = new List<ITwinElement>();
2341

2442
public bool HasFocus { get; set; }
2543

2644
/// <summary>
2745
/// Method, which updates are primitive values of ITwinObject instance
2846
/// <param name="element">ITwinObject instance.</param>
47+
/// <param name="pollingInterval">Polling interval</param>
2948
/// </summary>
30-
public void UpdateValuesOnChange(ITwinObject element)
49+
public void UpdateValuesOnChange(ITwinObject element, int pollingInterval = 250)
3150
{
3251
if (element != null)
3352
{
53+
element.StartPolling(pollingInterval);
54+
PolledElements.Add(element);
3455
foreach (var twinPrimitive in element.RetrievePrimitives())
3556
{
3657
var tag = (OnlinerBase)twinPrimitive;
3758
tag.PropertyChanged += new PropertyChangedEventHandler(HandlePropertyChanged);
3859
}
3960
}
4061
}
62+
4163
/// <summary>
4264
/// Method, which updates primitive value.
4365
/// <param name="tag">IValueTag instance.</param>
66+
/// <param name="pollingInterval">Polling interval</param>
4467
/// </summary>
45-
public void UpdateValuesOnChange(OnlinerBase tag)
68+
public void UpdateValuesOnChange(OnlinerBase tag, int pollingInterval = 250)
4669
{
70+
tag.StartPolling(pollingInterval);
71+
PolledElements.Add(tag);
4772
tag.PropertyChanged += new PropertyChangedEventHandler(HandlePropertyChanged);
4873
}
4974

@@ -62,6 +87,7 @@ public void UpdateShadowValuesOnChange(ITwinObject element)
6287
}
6388
}
6489
}
90+
6591
/// <summary>
6692
/// Method, which updates shadow primitive value.
6793
/// <param name="tag">IValueTag instance.</param>
@@ -71,7 +97,6 @@ public void UpdateShadowValuesOnChange(ITwinPrimitive tag)
7197
((dynamic)tag).ShadowValueChangeEvent += new ValueChangedEventHandlerDelegate(HandleShadowPropertyChanged);
7298
}
7399

74-
75100
/// <summary>
76101
/// Method, which updates primitive value only, when element is out of focus.
77102
/// Public property IsFocus can be set. If is true, element won't be updated.
@@ -96,6 +121,5 @@ protected void HandlePropertyChangedOnOutFocus(object sender, PropertyChangedEve
96121
{
97122
if(!HasFocus) InvokeAsync(StateHasChanged);
98123
}
99-
100124
}
101125
}

src/AXSharp.blazor/src/AXSharp.Presentation.Blazor.Controls/RenderableContent/RenderableContentControl.cs

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -68,12 +68,6 @@ public string Presentation
6868
[Parameter]
6969
public string LayoutChildrenClass { get; set; }
7070

71-
/// <summary>
72-
/// Gets or sets polling interval for PLC variables of this controls context in ms.
73-
/// </summary>
74-
[Parameter]
75-
public int PollingInterval { get; set; } = 250;
76-
7771
[Inject]
7872
public ComponentService ComponentService { get; set; }
7973
[Inject]
@@ -93,7 +87,6 @@ protected override void OnInitialized()
9387
try
9488
{
9589
_context = (ITwinElement)Context;
96-
_context.StartPolling(this.PollingInterval);
9790
}
9891
catch
9992
{
@@ -375,7 +368,6 @@ private string GetDisplayPresentationIfEmpty()
375368

376369
public virtual void Dispose()
377370
{
378-
this._context?.StopPolling();
379371
_viewModelCache.ResetCounter();
380372
}
381373
}

src/AXSharp.blazor/src/AXSharp.Presentation.Blazor.Controls/RenderableContent/RenderableViewModelComponentBase.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,15 @@
2121
namespace AXSharp.Presentation.Blazor.Controls.RenderableContent
2222
{
2323
/// <summary>
24-
/// Base class for complex componenets with viewmodel support.
24+
/// Base class for complex components with viewmodel support.
2525
/// </summary>
2626
public class RenderableViewModelComponentBase<T> : RenderableComponentBase, IRenderableViewModelBase where T : RenderableViewModelBase, new()
2727
{
28-
2928
[Inject]
3029
private ViewModelCacheService _viewModelCache { get; set; }
3130

3231
private TwinContainerObject _twinContainer;
32+
3333
[Parameter]
3434
public TwinContainerObject TwinContainer
3535
{
@@ -66,7 +66,6 @@ private void ViewModelInitialization(TwinContainerObject container)
6666

6767
}
6868

69-
7069
public T ViewModel { get; set; }
7170
}
7271
}

0 commit comments

Comments
 (0)