Skip to content

Commit ea8c988

Browse files
Merge branch 'master' into bugfix/hub-name
2 parents c60225b + db057b6 commit ea8c988

14 files changed

+62
-54
lines changed

.github/workflows/ci.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ jobs:
1515
- name: Setup .NET Core
1616
uses: actions/setup-dotnet@v1
1717
with:
18-
dotnet-version: 5.0.x
18+
dotnet-version: 6.0.x
1919
- name: Build
2020
run: dotnet build --configuration Release
2121
- name: Test

.github/workflows/publish.yml

+16-9
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@ on:
55
tags:
66
- 'v*' # Push events to matching v*, i.e. v1.0, v20.15.10
77

8+
permissions:
9+
contents: write
10+
811
jobs:
912
build:
1013

@@ -15,7 +18,7 @@ jobs:
1518
- name: Setup .NET Core
1619
uses: actions/setup-dotnet@v1
1720
with:
18-
dotnet-version: 5.0.x
21+
dotnet-version: 6.0.x
1922
- name: Build
2023
run: dotnet build --configuration Release
2124
- name: Test
@@ -26,13 +29,17 @@ jobs:
2629
- name: Push
2730
working-directory: src/SignalR.Orleans/bin/Release
2831
run: |
29-
dotnet nuget push SignalR.Orleans.*.nupkg -k ${{ secrets.NUGET_KEY }} -s https://api.nuget.org/v3/index.json
32+
dotnet nuget push SignalR.Orleans.*.nupkg --skip-duplicate -k ${{ secrets.NUGET_KEY }} -s https://api.nuget.org/v3/index.json
3033
- name: Create Release
31-
uses: actions/create-release@master
32-
env:
33-
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
34+
uses: actions/github-script@v5
3435
with:
35-
tag_name: ${{ github.ref }}
36-
release_name: Release ${{ github.ref }}
37-
draft: false
38-
prerelease: false
36+
script: |
37+
github.rest.repos.createRelease({
38+
owner: context.repo.owner,
39+
repo: context.repo.repo,
40+
tag_name: context.ref,
41+
name: context.ref,
42+
draft: false,
43+
prerelease: false,
44+
generate_release_notes: true
45+
})

Directory.Build.props

+6-6
Original file line numberDiff line numberDiff line change
@@ -26,17 +26,17 @@
2626
</PropertyGroup>
2727

2828
<PropertyGroup>
29-
<TargetFramework>net5.0</TargetFramework>
29+
<TargetFramework>net6.0</TargetFramework>
3030
</PropertyGroup>
3131

3232
<!-- Shared Package Versions -->
3333
<PropertyGroup>
3434
<!-- vendors -->
35-
<OrleansCoreVersion>3.5.0</OrleansCoreVersion>
36-
<OrleansProvidersVersion>3.5.0</OrleansProvidersVersion>
37-
<OrleansCodeGeneratorVersion>3.5.0</OrleansCodeGeneratorVersion>
38-
<OrleansRuntimeAbstractionsVersion>3.5.0</OrleansRuntimeAbstractionsVersion>
39-
<OrleansRuntimeVersion>3.5.0</OrleansRuntimeVersion>
35+
<OrleansCoreVersion>3.6.3</OrleansCoreVersion>
36+
<OrleansProvidersVersion>3.6.3</OrleansProvidersVersion>
37+
<OrleansCodeGeneratorVersion>3.6.3</OrleansCodeGeneratorVersion>
38+
<OrleansRuntimeAbstractionsVersion>3.6.3</OrleansRuntimeAbstractionsVersion>
39+
<OrleansRuntimeVersion>3.6.3</OrleansRuntimeVersion>
4040
</PropertyGroup>
4141

4242
<ItemGroup>

README.Nuget.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ Now your SignalR application needs to connect to the Orleans Cluster by using an
7171
```cs
7272
var client = new ClientBuilder()
7373
.UseSignalR()
74+
// optional: .ConfigureApplicationParts(parts => parts.AddApplicationPart(typeof(IClientGrain).Assembly).WithReferences())
7475
.Build();
7576

7677
await client.Connect();
@@ -117,4 +118,4 @@ public class UserNotificationGrain : Grain<UserNotificationState>, IUserNotifica
117118
```
118119

119120
# Contributions
120-
PRs and feedback are **very** welcome!
121+
PRs and feedback are **very** welcome!

README.md

+6-5
Original file line numberDiff line numberDiff line change
@@ -57,12 +57,12 @@ Optional configuration to override the default implementation for both providers
5757
```cs
5858
.UseSignalR(cfg =>
5959
{
60-
cfg.ConfigureBuilder = (builder, config) =>
60+
cfg.Configure((builder, config) =>
6161
{
62-
builder
63-
.AddMemoryGrainStorage(config.PubSubProvider)
64-
.AddMemoryGrainStorage(config.StorageProvider);
65-
};
62+
builder
63+
.AddMemoryGrainStorage(config.PubSubProvider)
64+
.AddMemoryGrainStorage(config.StorageProvider);
65+
});
6666
})
6767
.RegisterHub<MyHub>()
6868
```
@@ -75,6 +75,7 @@ Now your SignalR application needs to connect to the Orleans Cluster by using an
7575
```cs
7676
var client = new ClientBuilder()
7777
.UseSignalR()
78+
// optional: .ConfigureApplicationParts(parts => parts.AddApplicationPart(typeof(IClientGrain).Assembly).WithReferences())
7879
.Build();
7980

8081
await client.Connect();

src/SignalR.Orleans/Clients/ClientGrain.cs

+1-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
using System;
2-
using System.Buffers;
32
using System.Diagnostics;
43
using System.Threading.Tasks;
54
using Microsoft.Extensions.Logging;
@@ -55,15 +54,14 @@ public override async Task OnActivateAsync()
5554
_serverStream = _streamProvider.GetStream<ClientMessage>(_clientState.State.ServerId, Constants.SERVERS_STREAM);
5655
_serverDisconnectedStream = _streamProvider.GetStream<Guid>(_clientState.State.ServerId, Constants.SERVER_DISCONNECTED);
5756
var subscriptions = await _serverDisconnectedStream.GetAllSubscriptionHandles();
58-
var subscriptionTasks = ArrayPool<Task>.Shared.Rent(subscriptions.Count);
57+
var subscriptionTasks = new Task[subscriptions.Count];
5958
for (int i = 0; i < subscriptions.Count; i++)
6059
{
6160
var subscription = subscriptions[i];
6261
subscriptionTasks[i] = subscription.ResumeAsync((serverId, _) => OnDisconnect("server-disconnected"));
6362
}
6463

6564
await Task.WhenAll(subscriptionTasks);
66-
ArrayPool<Task>.Shared.Return(subscriptionTasks);
6765
}
6866

6967
public async Task Send(Immutable<InvocationMessage> message)

src/SignalR.Orleans/Core/ConnectionGrain.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ public virtual async Task Remove(string connectionId)
8282

8383
public virtual Task Send(Immutable<InvocationMessage> message) => SendAll(message, _connectionState.State.Connections);
8484

85-
public Task SendExcept(string methodName, object?[]? args, IReadOnlyList<string> excludedConnectionIds)
85+
public Task SendExcept(string methodName, object?[] args, IReadOnlyList<string> excludedConnectionIds)
8686
{
8787
var message = new Immutable<InvocationMessage>(new InvocationMessage(methodName, args));
8888
return SendAll(message, _connectionState.State.Connections.Where(x => !excludedConnectionIds.Contains(x)).ToList());

src/SignalR.Orleans/Core/GrainExtensions.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ public static class GrainSignalRExtensions
1818
/// <param name="grain"></param>
1919
/// <param name="methodName">Target method name to invoke.</param>
2020
/// <param name="args">Arguments to pass to the target method.</param>
21-
public static Task Send(this IHubMessageInvoker grain, string methodName, params object?[]? args)
21+
public static Task Send(this IHubMessageInvoker grain, string methodName, params object?[] args)
2222
{
2323
var invocationMessage = new InvocationMessage(methodName, args).AsImmutable();
2424
return grain.Send(invocationMessage);
@@ -30,7 +30,7 @@ public static Task Send(this IHubMessageInvoker grain, string methodName, params
3030
/// <param name="grain"></param>
3131
/// <param name="methodName">Target method name to invoke.</param>
3232
/// <param name="args">Arguments to pass to the target method.</param>
33-
public static void SendOneWay(this IHubMessageInvoker grain, string methodName, params object?[]? args)
33+
public static void SendOneWay(this IHubMessageInvoker grain, string methodName, params object?[] args)
3434
{
3535
grain.InvokeOneWay(g => g.Send(methodName, args));
3636
}

src/SignalR.Orleans/Core/IConnectionGrain.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,6 @@ public interface IConnectionGrain : IHubMessageInvoker, IGrainWithStringKey
3232
/// <param name="methodName">Target method name to invoke.</param>
3333
/// <param name="args">Arguments to pass to the target method.</param>
3434
/// <param name="excludedConnectionIds">Connection ids to exclude.</param>
35-
Task SendExcept(string methodName, object?[]? args, IReadOnlyList<string> excludedConnectionIds);
35+
Task SendExcept(string methodName, object?[] args, IReadOnlyList<string> excludedConnectionIds);
3636
}
3737
}

src/SignalR.Orleans/HostingExtensions.cs

+2-3
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,7 @@ public static IClientBuilder UseSignalR(this IClientBuilder builder, SignalrClie
5959
if (config == null)
6060
config = new SignalrClientConfig();
6161

62-
return builder.AddSimpleMessageStreamProvider(Constants.STREAM_PROVIDER, opt => opt.FireAndForgetDelivery = config.UseFireAndForgetDelivery)
63-
.ConfigureApplicationParts(parts => parts.AddApplicationPart(typeof(IClientGrain).Assembly).WithReferences());
62+
return builder.AddSimpleMessageStreamProvider(Constants.STREAM_PROVIDER, opt => opt.FireAndForgetDelivery = config.UseFireAndForgetDelivery);
6463
}
6564
}
6665

@@ -187,4 +186,4 @@ public void ValidateConfiguration()
187186
$"Found the PubSub storage provider of type '{pubSubProvider.GetType().FullName}'.");
188187
}
189188
}
190-
}
189+
}

src/SignalR.Orleans/OrleansHubLifetimeManager.cs

+15-14
Original file line numberDiff line numberDiff line change
@@ -51,12 +51,13 @@ private async ValueTask EnsureStreamSetup()
5151
if (_streamProvider is not null)
5252
return;
5353

54-
await _streamSetupLock.WaitAsync();
55-
56-
if (_streamProvider is not null)
57-
return;
5854
try
5955
{
56+
await _streamSetupLock.WaitAsync();
57+
58+
if (_streamProvider is not null)
59+
return;
60+
6061
await SetupStreams();
6162
}
6263
finally
@@ -153,22 +154,22 @@ public override async Task OnDisconnectedAsync(HubConnectionContext connection)
153154
}
154155
}
155156

156-
public override Task SendAllAsync(string methodName, object?[]? args,
157+
public override Task SendAllAsync(string methodName, object?[] args,
157158
CancellationToken cancellationToken = new CancellationToken())
158159
{
159160
var message = new InvocationMessage(methodName, args);
160161
return _allStream.OnNextAsync(new AllMessage(message));
161162
}
162163

163-
public override Task SendAllExceptAsync(string methodName, object?[]? args,
164+
public override Task SendAllExceptAsync(string methodName, object?[] args,
164165
IReadOnlyList<string> excludedConnectionIds,
165166
CancellationToken cancellationToken = new CancellationToken())
166167
{
167168
var message = new InvocationMessage(methodName, args);
168169
return _allStream.OnNextAsync(new AllMessage(message, excludedConnectionIds));
169170
}
170171

171-
public override Task SendConnectionAsync(string connectionId, string methodName, object?[]? args,
172+
public override Task SendConnectionAsync(string connectionId, string methodName, object?[] args,
172173
CancellationToken cancellationToken = new CancellationToken())
173174
{
174175
if (string.IsNullOrWhiteSpace(connectionId)) throw new ArgumentNullException(nameof(connectionId));
@@ -182,14 +183,14 @@ public override Task SendConnectionAsync(string connectionId, string methodName,
182183
return SendExternal(connectionId, message);
183184
}
184185

185-
public override Task SendConnectionsAsync(IReadOnlyList<string> connectionIds, string methodName, object?[]? args,
186+
public override Task SendConnectionsAsync(IReadOnlyList<string> connectionIds, string methodName, object?[] args,
186187
CancellationToken cancellationToken = new CancellationToken())
187188
{
188189
var tasks = connectionIds.Select(c => SendConnectionAsync(c, methodName, args, cancellationToken));
189190
return Task.WhenAll(tasks);
190191
}
191192

192-
public override Task SendGroupAsync(string groupName, string methodName, object?[]? args,
193+
public override Task SendGroupAsync(string groupName, string methodName, object?[] args,
193194
CancellationToken cancellationToken = new CancellationToken())
194195
{
195196
if (string.IsNullOrWhiteSpace(groupName)) throw new ArgumentNullException(nameof(groupName));
@@ -199,14 +200,14 @@ public override Task SendGroupAsync(string groupName, string methodName, object?
199200
return group.Send(methodName, args);
200201
}
201202

202-
public override Task SendGroupsAsync(IReadOnlyList<string> groupNames, string methodName, object?[]? args,
203+
public override Task SendGroupsAsync(IReadOnlyList<string> groupNames, string methodName, object?[] args,
203204
CancellationToken cancellationToken = new CancellationToken())
204205
{
205206
var tasks = groupNames.Select(g => SendGroupAsync(g, methodName, args, cancellationToken));
206207
return Task.WhenAll(tasks);
207208
}
208209

209-
public override Task SendGroupExceptAsync(string groupName, string methodName, object?[]? args,
210+
public override Task SendGroupExceptAsync(string groupName, string methodName, object?[] args,
210211
IReadOnlyList<string> excludedConnectionIds,
211212
CancellationToken cancellationToken = new CancellationToken())
212213
{
@@ -217,7 +218,7 @@ public override Task SendGroupExceptAsync(string groupName, string methodName, o
217218
return group.SendExcept(methodName, args, excludedConnectionIds);
218219
}
219220

220-
public override Task SendUserAsync(string userId, string methodName, object?[]? args,
221+
public override Task SendUserAsync(string userId, string methodName, object?[] args,
221222
CancellationToken cancellationToken = new CancellationToken())
222223
{
223224
if (string.IsNullOrWhiteSpace(userId)) throw new ArgumentNullException(nameof(userId));
@@ -227,7 +228,7 @@ public override Task SendUserAsync(string userId, string methodName, object?[]?
227228
return user.Send(methodName, args);
228229
}
229230

230-
public override Task SendUsersAsync(IReadOnlyList<string> userIds, string methodName, object?[]? args,
231+
public override Task SendUsersAsync(IReadOnlyList<string> userIds, string methodName, object?[] args,
231232
CancellationToken cancellationToken = new CancellationToken())
232233
{
233234
var tasks = userIds.Select(u => SendGroupAsync(u, methodName, args, cancellationToken));
@@ -305,4 +306,4 @@ public void Participate(ISiloLifecycle lifecycle)
305306
}
306307

307308
public record AllMessage(InvocationMessage Payload, IReadOnlyList<string>? ExcludedIds = null);
308-
}
309+
}

src/SignalR.Orleans/SignalR.Orleans.csproj

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFramework>net5.0</TargetFramework>
4+
<TargetFramework>net6.0</TargetFramework>
55
<Nullable>enable</Nullable>
66
</PropertyGroup>
77

@@ -13,7 +13,6 @@
1313
<PackageReleaseNotes></PackageReleaseNotes>
1414
<IncludeSymbols>true</IncludeSymbols>
1515
<IncludeSource>true</IncludeSource>
16-
<PackageVersion>2.1.0</PackageVersion>
1716
</PropertyGroup>
1817

1918
<ItemGroup>

test/SignalR.Orleans.Tests/OrleansFixture.cs

+3-1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using Orleans;
55
using Orleans.Hosting;
66
using Orleans.Configuration;
7+
using SignalR.Orleans.Clients;
78

89
namespace SignalR.Orleans.Tests
910
{
@@ -27,6 +28,7 @@ public OrleansFixture()
2728
.UseLocalhostClustering()
2829
.Configure<EndpointOptions>(options => options.AdvertisedIPAddress = IPAddress.Loopback)
2930
.UseSignalR()
31+
.ConfigureApplicationParts(parts => parts.AddApplicationPart(typeof(IClientGrain).Assembly).WithReferences())
3032
.Build();
3133

3234
client.Connect().Wait();
@@ -39,4 +41,4 @@ public void Dispose()
3941
Silo.StopAsync().Wait();
4042
}
4143
}
42-
}
44+
}

test/SignalR.Orleans.Tests/SignalR.Orleans.Tests.csproj

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFramework>net5.0</TargetFramework>
4+
<TargetFramework>net6.0</TargetFramework>
55
<IsPackable>false</IsPackable>
66
</PropertyGroup>
77

88
<ItemGroup>
9-
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.11.0" />
10-
<PackageReference Include="xunit" Version="2.4.1" />
11-
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.3">
9+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.2.0" />
10+
<PackageReference Include="xunit" Version="2.4.2" />
11+
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.5">
1212
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
1313
<PrivateAssets>all</PrivateAssets>
1414
</PackageReference>
15-
<PackageReference Include="coverlet.collector" Version="3.1.0">
15+
<PackageReference Include="coverlet.collector" Version="3.1.2">
1616
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
1717
<PrivateAssets>all</PrivateAssets>
1818
</PackageReference>

0 commit comments

Comments
 (0)