@@ -27,16 +27,59 @@ public void Write_Ok()
2727 Assert . Equal ( 2 , values . Count ) ;
2828 Assert . All ( values , v => Assert . Equal ( Quality . Good , v . Quality ) ) ;
2929
30- var results = server . Write ( new OpcWriteItem ( )
31- {
32- Name = "Channel1.Device1.Tag3" ,
33- Value = 123
34- } ) ;
30+ var results = server . Write ( [
31+ new OpcWriteItem ( )
32+ {
33+ Name = "Channel1.Device1.Tag2" ,
34+ Value = 123
35+ } ,
36+ new OpcWriteItem ( )
37+ {
38+ Name = "Channel1.Device1.Tag3" ,
39+ Value = 123
40+ }
41+ ] ) ;
3542 Assert . All ( results , v => Assert . True ( v . Result ) ) ;
3643
3744 server . Disconnect ( ) ;
3845 Assert . False ( server . IsConnected ) ;
3946
4047 server . Dispose ( ) ;
4148 }
49+
50+ [ Fact ]
51+ public async Task Subscription_Ok ( )
52+ {
53+ var sc = new ServiceCollection ( ) ;
54+ sc . AddOpcServer ( ) ;
55+
56+ var sp = sc . BuildServiceProvider ( ) ;
57+ var server = sp . GetRequiredService < IOpcServer > ( ) ;
58+ server . Connect ( "opcda://localhost/Kepware.KEPServerEX.V6" ) ;
59+
60+ var subscription = server . CreateSubscription ( "Test" ) ;
61+ subscription . AddItems (
62+ [
63+ "Channel1.Device1.Tag1" ,
64+ "Channel1.Device1.Tag2" ,
65+ "Channel1.Device1.Tag3"
66+ ] ) ;
67+
68+ var tcs = new TaskCompletionSource ( ) ;
69+ var values = new List < OpcReadItem > ( ) ;
70+ subscription . KeepLastValue = true ;
71+ subscription . DataChanged += items =>
72+ {
73+ values . Clear ( ) ;
74+ values . AddRange ( items ) ;
75+ tcs . TrySetResult ( ) ;
76+ return Task . CompletedTask ;
77+ } ;
78+ await tcs . Task ;
79+
80+ server . CancelSubscription ( subscription ) ;
81+
82+ server . Disconnect ( ) ;
83+ server . Dispose ( ) ;
84+ }
4285}
0 commit comments