Skip to content

Commit 4831b05

Browse files
authored
[NEW-FEATURE] Connector should provide capability of creating identity for object of ITwinIdentity (#186)
* Create draft PR for #185 * adds possibility of creating identities from the .net application instead of controller, only identities with 0 value are created --------- Co-authored-by: PTKu <[email protected]>
1 parent 3db2df3 commit 4831b05

File tree

8 files changed

+54
-30
lines changed

8 files changed

+54
-30
lines changed

src/AXSharp.connectors/src/AXSharp.Connector/Identity/TwinIdentityProvider.cs

Lines changed: 34 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
using System;
99
using System.Collections.Generic;
1010
using System.Linq;
11+
using System.Threading.Tasks;
1112
using AXSharp.Connector.ValueTypes;
1213

1314
namespace AXSharp.Connector.Identity;
@@ -50,7 +51,7 @@ public SortedDictionary<ulong, ITwinIdentity> Identities
5051
{
5152
get
5253
{
53-
if (_sortedIdentities.Count == 0) SortIdentities();
54+
if (_sortedIdentities.Count == 0) SortIdentitiesAsync().Wait();
5455

5556
return _sortedIdentities;
5657
}
@@ -186,12 +187,27 @@ public ITwinIdentity GetTwinByIdentity(ulong identity)
186187
/// Reads twin objects identities.
187188
/// </summary>
188189
/// <returns>Identity onliners.</returns>
189-
public IEnumerable<OnlinerULInt> ReadIdentities()
190+
internal async Task<IEnumerable<OnlinerULInt>> ReadIdentitiesAsync()
190191
{
191192
if (_connector != null)
192193
{
193194
_connector.Logger.Information("Reading identities...");
194-
_connector.ReadBatchAsync(_identitiesTags).Wait();
195+
await _connector.ReadBatchAsync(_identitiesTags);
196+
var lastIdentity = 0ul;
197+
if (_identitiesTags.Count > 0)
198+
{
199+
lastIdentity = _identitiesTags.Max(p => p.LastValue);
200+
}
201+
202+
_connector.Logger.Information("Assigning missing identities...");
203+
foreach (var it in _identitiesTags)
204+
{
205+
if (it.LastValue == 0)
206+
{
207+
it.Cyclic = ++lastIdentity;
208+
}
209+
}
210+
await _connector.WriteBatchAsync(_identitiesTags);
195211
_connector.Logger.Information("Reading identities done.");
196212
_connector.Logger.Information(
197213
$"Number of identities: {_identitiesTags.Count} | Unique :{_identities.Count}");
@@ -203,26 +219,29 @@ public IEnumerable<OnlinerULInt> ReadIdentities()
203219
/// <summary>
204220
/// Refreshes and sorts identities.
205221
/// </summary>
206-
public void RefreshIdentities()
222+
public async Task ConstructIdentitiesAsync()
207223
{
208-
ReadIdentities();
209-
SortIdentities();
224+
await ReadIdentitiesAsync();
225+
await SortIdentitiesAsync();
210226
}
211227

212228
/// <summary>
213229
/// Sorts identities.
214230
/// </summary>
215-
public void SortIdentities()
231+
internal async Task SortIdentitiesAsync()
216232
{
217-
_connector?.Logger.Information("Sorting identities...");
218-
_sortedIdentities.Clear();
219-
foreach (var identity in _identities)
233+
await Task.Run(() =>
220234
{
221-
var key = identity.Key.LastValue == 0 ? identity.Key.GetAsync().Result : identity.Key.LastValue;
222-
if (!_sortedIdentities.ContainsKey(key))
223-
_sortedIdentities.Add(key, identity.Value);
224-
}
235+
_connector?.Logger.Information("Sorting identities...");
236+
_sortedIdentities.Clear();
237+
foreach (var identity in _identities)
238+
{
239+
var key = identity.Key.LastValue == 0 ? identity.Key.GetAsync().Result : identity.Key.LastValue;
240+
if (!_sortedIdentities.ContainsKey(key))
241+
_sortedIdentities.Add(key, identity.Value);
242+
}
225243

226-
_connector?.Logger.Information("Sorting identities done.");
244+
_connector?.Logger.Information("Sorting identities done.");
245+
});
227246
}
228247
}

src/AXSharp.connectors/src/AXSharp.Connector/Properties/AssemblyInfo.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,5 @@
88
using System.Runtime.CompilerServices;
99

1010
[assembly: InternalsVisibleTo("AXSharp.Connector.S71500.WebAPI")]
11-
[assembly: InternalsVisibleTo("AXSharp.ConnectorTests")]
11+
[assembly: InternalsVisibleTo("AXSharp.ConnectorTests")]
12+
[assembly: InternalsVisibleTo("AXSharp.ConnectorLegacyTests")]

src/AXSharp.connectors/tests/AXSharp.ConnectorLegacyTests/Identity/TwinIdentityProviderTests.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ namespace AXSharp.Connector.Identity.Tests
2222
public class TwinIdentityProviderTests
2323
{
2424
[Test()]
25-
public void AddIdentityTest()
25+
public async Task AddIdentityTest()
2626
{
2727
//-- Arrange
2828
var identityProvider = new TwinIdentityProvider(new DummyConnector());
@@ -33,7 +33,7 @@ public void AddIdentityTest()
3333
identityProvider.AddIdentity(new IdentityTestObject() { Identity = new OnlinerULInt() { Cyclic = 1000, SetLastValue = 1000 }, AttributeName = "n1000", Symbol = "s1000" });
3434
identityProvider.AddIdentity(new IdentityTestObject() { Identity = new OnlinerULInt() { Cyclic = 2000, SetLastValue = 2000 }, AttributeName = "n2000", Symbol = "s2000" });
3535
#pragma warning restore CS0618 // Type or member is obsolete
36-
identityProvider.SortIdentities();
36+
await identityProvider.SortIdentitiesAsync();
3737

3838
//-- Assert
3939
var actual = identityProvider.GetTwinByIdentity(1000);
@@ -43,7 +43,7 @@ public void AddIdentityTest()
4343
}
4444

4545
[Test()]
46-
public void GetTwinByIdentityTest()
46+
public async Task GetTwinByIdentityTest()
4747
{
4848
//-- Arrange
4949
var identityProvider = new TwinIdentityProvider(new DummyConnector());
@@ -53,7 +53,7 @@ public void GetTwinByIdentityTest()
5353
identityProvider.AddIdentity(new IdentityTestObject() { Identity = new OnlinerULInt() { Cyclic = 1000, SetLastValue = 1000 }, AttributeName = "n1000", Symbol = "s1000" });
5454
identityProvider.AddIdentity(new IdentityTestObject() { Identity = new OnlinerULInt() { Cyclic = 2000, SetLastValue = 2000 }, AttributeName = "n2000", Symbol = "s2000" });
5555
#pragma warning restore CS0618 // Type or member is obsolete
56-
identityProvider.SortIdentities();
56+
await identityProvider.SortIdentitiesAsync();
5757

5858
//-- Assert
5959
var actual = identityProvider.GetTwinByIdentity(1000);
@@ -66,7 +66,7 @@ public void GetTwinByIdentityTest()
6666
}
6767

6868
[Test()]
69-
public void AddIdentityExistingTest()
69+
public async Task AddIdentityExistingTest()
7070
{
7171
//-- Arrange
7272
var identityProvider = new TwinIdentityProvider(new DummyConnector());
@@ -80,7 +80,7 @@ public void AddIdentityExistingTest()
8080
identityProvider.AddIdentity(ident.MemberByIdentityObjectNoAttribute);
8181
identityProvider.AddIdentity(ident.MemberByIdentityObjectNoAttributeDiffIdentity);
8282

83-
identityProvider.SortIdentities();
83+
await identityProvider.SortIdentitiesAsync();
8484

8585
//-- Assert
8686
Assert.AreEqual(2, identityProvider.IdentitiesCount);

src/AXSharp.connectors/tests/AXSharp.ConnectorTests/AXSharp.ConnectorTests/Identity/TwinIdentityProviderTests.cs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -184,36 +184,36 @@ public void CanCallGetTwinByIdentityWithIdentity()
184184
}
185185

186186
[Fact]
187-
public void CanCallReadIdentities()
187+
public async void CanCallReadIdentities()
188188
{
189189
// Arrange
190190
var connector = Substitute.For<DummyConnector>();
191191
var testClass = Substitute.For<TwinIdentityProvider>(connector);
192192

193193
// Act
194-
var result = testClass.ReadIdentities();
194+
var result = await testClass.ReadIdentitiesAsync();
195195

196196
// Assert
197197
connector.Received().ReadBatchAsync(result).Wait();
198198
}
199199

200200
[Fact]
201-
public void CanCallRefreshIdentities()
201+
public async void CanCallRefreshIdentities()
202202
{
203203
// Arrange
204204
var connector = Substitute.For<DummyConnector>();
205205
var testClass = Substitute.For<TwinIdentityProvider>(_connector);
206206

207207
// Act
208-
testClass.RefreshIdentities();
208+
await testClass.ConstructIdentitiesAsync();
209209

210210
// Assert
211-
testClass.Received().ReadIdentities();
212-
testClass.Received().SortIdentities();
211+
await testClass.Received().ReadIdentitiesAsync();
212+
await testClass.Received().SortIdentitiesAsync();
213213
}
214214

215215
[Fact]
216-
public void CanCallSortIdentities()
216+
public async void CanCallSortIdentities()
217217
{
218218
// Arrange
219219
var testClass = Substitute.For<TwinIdentityProvider>();
@@ -238,7 +238,7 @@ public void CanCallSortIdentities()
238238
testClass.AddIdentity(obj1);
239239

240240
// Act
241-
testClass.SortIdentities();
241+
await testClass.SortIdentitiesAsync();
242242

243243
// Assert
244244
Assert.Equal(1ul, testClass.Identities.ElementAt(0).Key);

src/AXSharp.connectors/tests/ax-test-project/apax.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ targets:
55
- "1500"
66
- axunit-llvm
77
- plcsim
8+
- swcpu
89
devDependencies:
910
"@ax/sdk": 3.0.17
1011
dependencies:

src/AXSharp.templates/working/templates/axsharpblazor/ax/apax.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ targets:
55
- "1500"
66
- axunit-llvm
77
- plcsim
8+
- swcpu
89
devDependencies:
910
"@ax/sdk": 3.0.8
1011
"@ax/sld": ^0.14.2

src/AXSharp.templates/working/templates/axsharpconsole/ax/apax.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ targets:
55
- "1500"
66
- plcsim
77
- axunit-llvm
8+
- swcpu
89
devDependencies:
910
"@ax/sdk": 3.0.8
1011
"@ax/sld": ^0.14.2

src/tests.integrations/integrated/src/ax/apax.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ targets:
55
- "1500"
66
- axunit-llvm
77
- plcsim
8+
- swcpu
89
devDependencies:
910
"@ax/sdk": 3.0.8
1011
"@ax/sld": ^0.14.2

0 commit comments

Comments
 (0)