Skip to content

Commit 60d5a7d

Browse files
committed
chore: events in options
1 parent c01a3ea commit 60d5a7d

23 files changed

+189
-301
lines changed

.editorconfig

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
dotnet_diagnostic.severity = warning
44
dotnet_diagnostic.CS1591.severity = none
55
dotnet_diagnostic.IDE0001.severity = warning
6+
dotnet_diagnostic.IDE0005.severity = warning
67
dotnet_diagnostic.IDE0007.severity = warning
78
dotnet_diagnostic.IDE0008.severity = none
89
dotnet_diagnostic.IDE0010.severity = none

.github/workflows/build.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,4 @@ jobs:
1111
uses: devcontainers/ci@v0.3
1212
with:
1313
push: never
14-
runCmd: dotnet test
14+
runCmd: dotnet test --max-parallel-test-modules 1

.github/workflows/publish.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ jobs:
1414
uses: devcontainers/ci@v0.3
1515
with:
1616
push: never
17-
runCmd: dotnet test
17+
runCmd: dotnet test --max-parallel-test-modules 1
1818
publish:
1919
runs-on: ubuntu-latest
2020
steps:

L1L2RedisCache.sln

Lines changed: 0 additions & 119 deletions
This file was deleted.

L1L2RedisCache.slnx

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<Solution>
2+
<Configurations>
3+
<Platform Name="Any CPU" />
4+
<Platform Name="x64" />
5+
<Platform Name="x86" />
6+
</Configurations>
7+
<Folder Name="/labs/">
8+
<Project Path="labs/MessagingRedisCache/MessagingRedisCache.Lab.csproj" />
9+
</Folder>
10+
<Folder Name="/src/">
11+
<Project Path="src/L1L2RedisCache/L1L2RedisCache.csproj" />
12+
<Project Path="src/MessagingRedisCache/MessagingRedisCache.csproj" />
13+
</Folder>
14+
<Folder Name="/tests/">
15+
<Project Path="tests/L1L2RedisCache/System/L1L2RedisCache.Tests.System.csproj" />
16+
<Project Path="tests/MessagingRedisCache/System/MessagingRedisCache.Tests.System.csproj" />
17+
<Project Path="tests/MessagingRedisCache/Unit/MessagingRedisCache.Tests.Unit.csproj" />
18+
</Folder>
19+
</Solution>

src/MessagingRedisCache/Messaging/DefaultMessageSubscriber.cs

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -14,25 +14,25 @@ internal class DefaultMessageSubscriber(
1414
memoryCache;
1515
public MessagingRedisCacheOptions MessagingRedisCacheOptions { get; set; } =
1616
messagingRedisCacheOptionsAccessor.Value;
17-
public EventHandler<OnMessageEventArgs>? OnMessage { get; set; }
18-
public EventHandler? OnSubscribe { get; set; }
1917

2018
public async Task SubscribeAsync(
2119
IConnectionMultiplexer connectionMultiplexer,
2220
CancellationToken cancellationToken = default)
2321
{
24-
await connectionMultiplexer
22+
(await connectionMultiplexer
2523
.GetSubscriber()
2624
.SubscribeAsync(
2725
new RedisChannel(
2826
MessagingRedisCacheOptions.Channel,
29-
RedisChannel.PatternMode.Literal),
30-
ProcessMessage)
31-
.ConfigureAwait(false);
27+
RedisChannel.PatternMode.Literal))
28+
.ConfigureAwait(false))
29+
.OnMessage(ProcessMessageAsync);
3230

33-
OnSubscribe?.Invoke(
34-
this,
35-
EventArgs.Empty);
31+
await MessagingRedisCacheOptions
32+
.Events
33+
.OnSubscribe
34+
.Invoke()
35+
.ConfigureAwait(false);
3636
}
3737

3838
public async Task UnsubscribeAsync(
@@ -48,23 +48,24 @@ await connectionMultiplexer
4848
.ConfigureAwait(false);
4949
}
5050

51-
internal void ProcessMessage(
52-
RedisChannel channel,
53-
RedisValue message)
51+
internal async Task ProcessMessageAsync(
52+
ChannelMessage channelMessage)
5453
{
5554
var cacheMessage = JsonSerializer
5655
.Deserialize(
57-
message.ToString(),
56+
channelMessage.Message.ToString(),
5857
SourceGenerationContext.Default.CacheMessage);
5958
if (cacheMessage != null &&
6059
cacheMessage.PublisherId != MessagingRedisCacheOptions.Id)
6160
{
6261
MemoryCache.Remove(
6362
cacheMessage.Key);
6463

65-
OnMessage?.Invoke(
66-
this,
67-
new OnMessageEventArgs(cacheMessage.Key));
64+
await MessagingRedisCacheOptions
65+
.Events
66+
.OnMessageRecieved
67+
.Invoke(channelMessage)
68+
.ConfigureAwait(false);
6869
}
6970
}
7071
}

src/MessagingRedisCache/Messaging/IMessageSubscriber.cs

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,6 @@ namespace MessagingRedisCache;
77
/// </summary>
88
public interface IMessageSubscriber
99
{
10-
/// <summary>
11-
/// An event that is raised when a message is recieved.
12-
/// </summary>
13-
EventHandler<OnMessageEventArgs>? OnMessage { get; set; }
14-
15-
/// <summary>
16-
/// An event that is raised when a subscription is created.
17-
/// </summary>
18-
EventHandler? OnSubscribe { get; set; }
19-
2010
/// <summary>
2111
/// Subscribes to messages indicating cache values have changed.
2212
/// </summary>

src/MessagingRedisCache/Messaging/KeyeventMessageSubscriber.cs

Lines changed: 23 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -13,34 +13,34 @@ internal class KeyeventMessageSubscriber(
1313
memoryCache;
1414
public MessagingRedisCacheOptions MessagingRedisCacheOptions { get; set; } =
1515
messagingRedisCacheOptionsAccessor.Value;
16-
public EventHandler<OnMessageEventArgs>? OnMessage { get; set; }
17-
public EventHandler? OnSubscribe { get; set; }
1816

1917
public async Task SubscribeAsync(
2018
IConnectionMultiplexer connectionMultiplexer,
2119
CancellationToken cancellationToken = default)
2220
{
23-
await connectionMultiplexer
21+
(await connectionMultiplexer
2422
.GetSubscriber()
2523
.SubscribeAsync(
2624
new RedisChannel(
2725
"__keyevent@*__:del",
28-
RedisChannel.PatternMode.Pattern),
29-
ProcessMessage)
30-
.ConfigureAwait(false);
26+
RedisChannel.PatternMode.Pattern))
27+
.ConfigureAwait(false))
28+
.OnMessage(ProcessMessageAsync);
3129

32-
await connectionMultiplexer
30+
(await connectionMultiplexer
3331
.GetSubscriber()
3432
.SubscribeAsync(
3533
new RedisChannel(
3634
"__keyevent@*__:hset",
37-
RedisChannel.PatternMode.Pattern),
38-
ProcessMessage)
39-
.ConfigureAwait(false);
35+
RedisChannel.PatternMode.Pattern))
36+
.ConfigureAwait(false))
37+
.OnMessage(ProcessMessageAsync);
4038

41-
OnSubscribe?.Invoke(
42-
this,
43-
EventArgs.Empty);
39+
await MessagingRedisCacheOptions
40+
.Events
41+
.OnSubscribe
42+
.Invoke()
43+
.ConfigureAwait(false);
4444
}
4545

4646
public async Task UnsubscribeAsync(
@@ -64,23 +64,24 @@ await connectionMultiplexer
6464
.ConfigureAwait(false);
6565
}
6666

67-
internal void ProcessMessage(
68-
RedisChannel channel,
69-
RedisValue message)
67+
internal async Task ProcessMessageAsync(
68+
ChannelMessage channelMessage)
7069
{
7170
if (string.IsNullOrEmpty(
7271
MessagingRedisCacheOptions.InstanceName) ||
73-
message.StartsWith(
72+
channelMessage.Message.StartsWith(
7473
MessagingRedisCacheOptions.InstanceName))
7574
{
76-
var key = message
77-
.ToString()[(MessagingRedisCacheOptions.InstanceName?.Length ?? 0)..];
75+
var key = channelMessage.Message
76+
.ToString()[ (MessagingRedisCacheOptions.InstanceName?.Length ?? 0).. ];
7877
MemoryCache.Remove(
7978
key);
8079

81-
OnMessage?.Invoke(
82-
this,
83-
new OnMessageEventArgs(key));
80+
await MessagingRedisCacheOptions
81+
.Events
82+
.OnMessageRecieved
83+
.Invoke(channelMessage)
84+
.ConfigureAwait(false);
8485
}
8586
}
8687
}

src/MessagingRedisCache/Messaging/KeyspaceMessageSubscriber.cs

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,6 @@ internal class KeyspaceMessageSubscriber(
1414
memoryCache;
1515
public MessagingRedisCacheOptions MessagingRedisCacheOptions { get; set; } =
1616
messagingRedisCacheOptionsAccessor.Value;
17-
public EventHandler<OnMessageEventArgs>? OnMessage { get; set; }
18-
public EventHandler? OnSubscribe { get; set; }
1917

2018
private Regex ChannelPrefixRegex { get; } = new(
2119
@$"__keyspace@\d*__:{messagingRedisCacheOptionsAccessor.Value.InstanceName}");
@@ -24,18 +22,20 @@ public async Task SubscribeAsync(
2422
IConnectionMultiplexer connectionMultiplexer,
2523
CancellationToken cancellationToken = default)
2624
{
27-
await connectionMultiplexer
25+
(await connectionMultiplexer
2826
.GetSubscriber()
2927
.SubscribeAsync(
3028
new RedisChannel(
3129
$"__keyspace@*__:{MessagingRedisCacheOptions.InstanceName}*",
32-
RedisChannel.PatternMode.Pattern),
33-
ProcessMessage)
34-
.ConfigureAwait(false);
30+
RedisChannel.PatternMode.Pattern))
31+
.ConfigureAwait(false))
32+
.OnMessage(ProcessMessageAsync);
3533

36-
OnSubscribe?.Invoke(
37-
this,
38-
EventArgs.Empty);
34+
await MessagingRedisCacheOptions
35+
.Events
36+
.OnSubscribe
37+
.Invoke()
38+
.ConfigureAwait(false);
3939
}
4040

4141
public async Task UnsubscribeAsync(
@@ -51,22 +51,23 @@ await connectionMultiplexer
5151
.ConfigureAwait(false);
5252
}
5353

54-
internal void ProcessMessage(
55-
RedisChannel channel,
56-
RedisValue message)
54+
internal async Task ProcessMessageAsync(
55+
ChannelMessage channelMessage)
5756
{
58-
if (message == "del" ||
59-
message == "hset")
57+
if (channelMessage.Message == "del" ||
58+
channelMessage.Message == "hset")
6059
{
6160
var key = ChannelPrefixRegex.Replace(
62-
channel.ToString(),
61+
channelMessage.Channel.ToString(),
6362
string.Empty);
6463
MemoryCache.Remove(
6564
key);
6665

67-
OnMessage?.Invoke(
68-
this,
69-
new OnMessageEventArgs(key));
66+
await MessagingRedisCacheOptions
67+
.Events
68+
.OnMessageRecieved
69+
.Invoke(channelMessage)
70+
.ConfigureAwait(false);
7071
}
7172
}
7273
}

0 commit comments

Comments
 (0)