Skip to content

Commit 33d4532

Browse files
committed
Version 0.0.19
1 parent 9cfc059 commit 33d4532

10 files changed

+87
-34
lines changed

SDK.CSharp.Hub/SDK.CSharp.Hub.csproj

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@
99
<AssemblyName>OpenShock.SDK.CSharp.Hub</AssemblyName>
1010
<RootNamespace>OpenShock.SDK.CSharp.Hub</RootNamespace>
1111
<Company>OpenShock</Company>
12-
<AssemblyVersion>0.0.16</AssemblyVersion>
13-
<Version>0.0.16</Version>
12+
<AssemblyVersion>0.0.19</AssemblyVersion>
13+
<Version>0.0.19</Version>
1414
<Title>SDK.DotNet.Hub</Title>
1515
<Authors>OpenShock</Authors>
1616
<Description>Extension for OpenShock.SDK.CSharp</Description>
@@ -35,7 +35,7 @@
3535
<PrivateAssets>all</PrivateAssets>
3636
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
3737
</PackageReference>
38-
<PackageReference Condition=" '$(Configuration)' == 'Release' " Include="OpenShock.SDK.CSharp" Version="0.0.15" />
38+
<PackageReference Condition=" '$(Configuration)' == 'Release' " Include="OpenShock.SDK.CSharp" Version="0.0.19" />
3939
<PackageReference Include="Semver" Version="2.3.0"/>
4040
</ItemGroup>
4141

SDK.CSharp.Live/IOpenShockLiveControlClient.cs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,16 @@
1-
using OneOf;
2-
using OneOf.Types;
3-
using OpenShock.SDK.CSharp.Live.LiveControlModels;
1+
using OpenShock.SDK.CSharp.Live.LiveControlModels;
2+
using OpenShock.SDK.CSharp.Updatables;
43

54
namespace OpenShock.SDK.CSharp.Live;
65

76
public interface IOpenShockLiveControlClient
87
{
9-
public ulong Latency { get; }
10-
public WebsocketConnectionState State { get; }
8+
public IAsyncUpdatable<ulong> Latency { get; }
9+
public IAsyncUpdatable<WebsocketConnectionState> State { get; }
1110

1211
# region Events
1312

1413
public event Func<Task>? OnDispose;
15-
public event Func<WebsocketConnectionState, Task>? OnStateUpdate;
1614
public event Func<Task>? OnDeviceNotConnected;
1715
public event Func<Task>? OnDeviceConnected;
1816

SDK.CSharp.Live/OpenShockLiveControlClient.cs

Lines changed: 11 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
using OpenShock.SDK.CSharp.Live.LiveControlModels;
1111
using OpenShock.SDK.CSharp.Live.Utils;
1212
using OpenShock.SDK.CSharp.Serialization;
13+
using OpenShock.SDK.CSharp.Updatables;
1314
using OpenShock.SDK.CSharp.Utils;
1415

1516
namespace OpenShock.SDK.CSharp.Live;
@@ -27,12 +28,9 @@ public sealed class OpenShockLiveControlClient : IOpenShockLiveControlClient, IA
2728
private readonly string _authToken;
2829
private readonly ILogger<OpenShockLiveControlClient> _logger;
2930
private ClientWebSocket? _clientWebSocket = null;
30-
31-
public event Func<WebsocketConnectionState, Task>? OnStateUpdate;
31+
3232
public event Func<Task>? OnDeviceNotConnected;
3333
public event Func<Task>? OnDeviceConnected;
34-
private WebsocketConnectionState _state = WebsocketConnectionState.Disconnected;
35-
3634
public event Func<Task>? OnDispose;
3735

3836
private readonly CancellationTokenSource _dispose;
@@ -59,16 +57,8 @@ public OpenShockLiveControlClient(string gateway, Guid deviceId, string authToke
5957
private ValueTask QueueMessage(BaseRequest<LiveRequestType> data) =>
6058
_channel.Writer.WriteAsync(data, _dispose.Token);
6159

62-
public WebsocketConnectionState State
63-
{
64-
get => _state;
65-
private set
66-
{
67-
_state = value;
68-
OnStateUpdate?.Raise(value);
69-
}
70-
}
71-
60+
private readonly AsyncUpdatableVariable<WebsocketConnectionState> _state = new(WebsocketConnectionState.Disconnected);
61+
public IAsyncUpdatable<WebsocketConnectionState> State => _state;
7262

7363
private async Task MessageLoop()
7464
{
@@ -98,7 +88,7 @@ private async Task<OneOf<Success, NotFound, Shutdown, Reconnecting>> ConnectAsyn
9888
return new Shutdown();
9989
}
10090

101-
State = WebsocketConnectionState.Connecting;
91+
_state.Value = WebsocketConnectionState.Connecting;
10292
#if NETSTANDARD2_1
10393
_currentConnectionClose?.Cancel();
10494
#else
@@ -121,7 +111,7 @@ private async Task<OneOf<Success, NotFound, Shutdown, Reconnecting>> ConnectAsyn
121111
await _clientWebSocket.ConnectAsync(new Uri($"wss://{_gateway}/1/ws/live/{_deviceId}"), _linked.Token);
122112

123113
_logger.LogInformation("Connected to websocket");
124-
State = WebsocketConnectionState.Connected;
114+
_state.Value = WebsocketConnectionState.Connected;
125115

126116
Run(ReceiveLoop, _linked.Token);
127117
Run(MessageLoop, _linked.Token);
@@ -145,7 +135,7 @@ private async Task<OneOf<Success, NotFound, Shutdown, Reconnecting>> ConnectAsyn
145135
_logger.LogError(e, "Error while connecting, retrying in 3 seconds");
146136
}
147137

148-
State = WebsocketConnectionState.Reconnecting;
138+
_state.Value = WebsocketConnectionState.Reconnecting;
149139
_clientWebSocket.Abort();
150140
_clientWebSocket.Dispose();
151141
await Task.Delay(3000, _dispose.Token);
@@ -248,7 +238,7 @@ await _clientWebSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, "Normal cl
248238
}
249239

250240
_logger.LogWarning("Lost websocket connection, trying to reconnect in 3 seconds");
251-
State = WebsocketConnectionState.Reconnecting;
241+
_state.Value = WebsocketConnectionState.Reconnecting;
252242

253243
_clientWebSocket?.Abort();
254244
_clientWebSocket?.Dispose();
@@ -298,7 +288,7 @@ await QueueMessage(new BaseRequest<LiveRequestType>
298288
return;
299289
}
300290

301-
Latency = latencyAnnounceResponse.OwnLatency;
291+
_latency.Value = latencyAnnounceResponse.OwnLatency;
302292
break;
303293

304294
case LiveResponseType.DeviceNotConnected:
@@ -353,7 +343,8 @@ public Task Run(Task? function, CancellationToken cancellationToken = default, [
353343
file.Substring(index + 1, file.Length - index - 1), member, line, t.Exception?.StackTrace);
354344
}, TaskContinuationOptions.OnlyOnFaulted);
355345

356-
public ulong Latency { get; private set; } = 0;
346+
private readonly AsyncUpdatableVariable<ulong> _latency = new(0);
347+
public IAsyncUpdatable<ulong> Latency => _latency;
357348

358349
public async Task SendFrame(ClientLiveFrame frame)
359350
{

SDK.CSharp.Live/SDK.CSharp.Live.csproj

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88
<AssemblyName>OpenShock.SDK.CSharp.Live</AssemblyName>
99
<RootNamespace>OpenShock.SDK.CSharp.Live</RootNamespace>
1010
<Company>OpenShock</Company>
11-
<AssemblyVersion>0.0.17</AssemblyVersion>
12-
<Version>0.0.17</Version>
11+
<AssemblyVersion>0.0.19</AssemblyVersion>
12+
<Version>0.0.19</Version>
1313
<Title>SDK.DotNet.Live</Title>
1414
<Authors>OpenShock</Authors>
1515
<Description>Extension for OpenShock.SDK.CSharp</Description>
@@ -31,7 +31,7 @@
3131
<PackageReference Include="Microsoft.Extensions.Logging" Version="8.0.0" />
3232
<PackageReference Include="Microsoft.IO.RecyclableMemoryStream" Version="3.0.0" />
3333
<PackageReference Include="OneOf" Version="3.0.263" />
34-
<PackageReference Condition=" '$(Configuration)' == 'Release' " Include="OpenShock.SDK.CSharp" Version="0.0.15" />
34+
<PackageReference Condition=" '$(Configuration)' == 'Release' " Include="OpenShock.SDK.CSharp" Version="0.0.19" />
3535
<PackageReference Include="PolySharp" Version="1.14.1">
3636
<PrivateAssets>all</PrivateAssets>
3737
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>

SDK.CSharp/SDK.CSharp.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88
<AssemblyName>OpenShock.SDK.CSharp</AssemblyName>
99
<RootNamespace>OpenShock.SDK.CSharp</RootNamespace>
1010
<Company>OpenShock</Company>
11-
<AssemblyVersion>0.0.16</AssemblyVersion>
12-
<Version>0.0.16</Version>
11+
<AssemblyVersion>0.0.19</AssemblyVersion>
12+
<Version>0.0.19</Version>
1313
<Title>SDK.DotNet</Title>
1414
<Authors>OpenShock</Authors>
1515
<Description>.NET / C# SDK for developing OpenShock applications. Used to interact with a OpenShock backend.</Description>
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
using OpenShock.SDK.CSharp.Utils;
2+
3+
namespace OpenShock.SDK.CSharp.Updatables;
4+
5+
public sealed class AsyncUpdatableVariable<T>(T internalValue) : IAsyncUpdatable<T>
6+
{
7+
public T Value
8+
{
9+
get => internalValue;
10+
set
11+
{
12+
if (internalValue!.Equals(value)) return;
13+
internalValue = value;
14+
Task.Run(() => OnValueChanged?.Raise(value));
15+
}
16+
}
17+
18+
public event Func<T, Task>? OnValueChanged;
19+
20+
public void UpdateWithoutNotify(T newValue)
21+
{
22+
internalValue = newValue;
23+
}
24+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
namespace OpenShock.SDK.CSharp.Updatables;
2+
3+
public interface IAsyncUpdatable<out T> : IUpdatableBase<T>
4+
{
5+
public event Func<T, Task>? OnValueChanged;
6+
}

SDK.CSharp/Updatables/IUpdatable.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
namespace OpenShock.SDK.CSharp.Updatables;
2+
3+
public interface IUpdatable<out T> : IUpdatableBase<T>
4+
{
5+
public event Action<T>? OnValueChanged;
6+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
namespace OpenShock.SDK.CSharp.Updatables;
2+
3+
public interface IUpdatableBase<out T>
4+
{
5+
public T Value { get; }
6+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
namespace OpenShock.SDK.CSharp.Updatables;
2+
3+
public sealed class UpdatableVariable<T>(T internalValue) : IUpdatable<T>
4+
{
5+
public T Value
6+
{
7+
get => internalValue;
8+
set
9+
{
10+
if (internalValue!.Equals(value)) return;
11+
internalValue = value;
12+
OnValueChanged?.Invoke(value);
13+
}
14+
}
15+
16+
public event Action<T>? OnValueChanged;
17+
18+
public void UpdateWithoutNotify(T newValue)
19+
{
20+
internalValue = newValue;
21+
}
22+
}

0 commit comments

Comments
 (0)