Skip to content

Commit 4b56baa

Browse files
[feature] Add refresh of server messages (#125)
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
1 parent 7026fee commit 4b56baa

21 files changed

Lines changed: 602 additions & 17 deletions

docs/client-deployment.md

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,12 @@ These projects are written in **C#** and target a specific version of **.NET**.
2525
{
2626
"LocalDebugUrl": "",
2727
"DevelopmentUrl": "",
28-
"StagingUrl": "",
29-
"ProductionUrl": "",
30-
"UpdatesDefinitionUrl": ""
31-
}
32-
```
28+
"StagingUrl": "",
29+
"ProductionUrl": "",
30+
"UpdatesDefinitionUrl": "",
31+
"MessagesDefinitionsUrl": ""
32+
}
33+
```
3334

3435
Fill in any relevant URLs or other settings your environment requires.
3536

docs/server-deployment.md

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,8 @@ Below is the JSON structure indicating which properties must be set. In particul
7171
"DatabaseName": ""
7272
},
7373
"AppSettings": {
74-
"Secret": "YOUR_UNIQUE_RANDOM_SEED"
74+
"Secret": "YOUR_UNIQUE_RANDOM_SEED",
75+
"MessagesDefinitionsUrl": ""
7576
}
7677
}
7778
```
@@ -97,7 +98,8 @@ Below is the JSON structure indicating which properties must be set. In particul
9798
"SignalR:ConnectionString": "<your-signalr-connection-string>",
9899
"CosmosDb:ConnectionString": "<your-cosmosdb-connection-string>",
99100
"CosmosDb:DatabaseName": "<your-database-name>",
100-
"AppSettings:Secret": "YOUR_UNIQUE_RANDOM_SEED"
101+
"AppSettings:Secret": "YOUR_UNIQUE_RANDOM_SEED",
102+
"AppSettings:MessagesDefinitionsUrl": ""
101103
}
102104
}
103105
```
@@ -136,6 +138,7 @@ cd ByteSync.Functions
136138

137139
# App Settings
138140
dotnet user-secrets set "AppSettings:Secret" "YOUR_UNIQUE_RANDOM_SEED"
141+
dotnet user-secrets set "AppSettings:MessagesDefinitionsUrl" ""
139142
```
140143

141144
Repeat these steps for **ByteSync.Functions.IntegrationTests** and **ByteSync.ServerCommon.Tests**, navigating to each project's directory and setting the same secrets.

src/ByteSync.Client/local.settings.template.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,6 @@
33
"DevelopmentUrl": "",
44
"StagingUrl": "",
55
"ProductionUrl": "",
6-
"UpdatesDefinitionUrl": ""
6+
"UpdatesDefinitionUrl": "",
7+
"MessagesDefinitionsUrl": ""
78
}

src/ByteSync.Common/Controls/Json/JsonSerializerOptionsHelper.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ public static void SetOptions(JsonSerializerOptions options)
2121
options.Converters.Add(new JsonStringEnumConverter());
2222
options.Converters.Add(new UtcDateTimeConverter());
2323

24+
options.PropertyNameCaseInsensitive = true;
25+
2426
options.IgnoreReadOnlyProperties = true;
2527
options.IgnoreReadOnlyFields = true;
2628
}

src/ByteSync.Functions/Helpers/Loaders/DependencyInjectionLoader.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,12 @@ private static void RegisterServerCommonAssembly(ContainerBuilder builder)
3737
.InstancePerLifetimeScope();
3838
}
3939

40+
builder.Register(c =>
41+
{
42+
var factory = c.Resolve<IHttpClientFactory>();
43+
return factory.CreateClient();
44+
}).As<HttpClient>().InstancePerLifetimeScope();
45+
4046
builder.RegisterAssemblyTypes(executingAssembly)
4147
.Where(t => t.Name.EndsWith("Service"))
4248
.InstancePerLifetimeScope()

src/ByteSync.Functions/Program.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
{
5252
services.AddApplicationInsightsTelemetryWorkerService();
5353
services.ConfigureFunctionsApplicationInsights();
54+
services.AddHttpClient();
5455

5556
services.Configure<LoggerFilterOptions>(options =>
5657
{
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
using ByteSync.ServerCommon.Business.Messages;
2+
using ByteSync.ServerCommon.Interfaces.Loaders;
3+
using ByteSync.ServerCommon.Interfaces.Repositories;
4+
using Microsoft.Azure.Functions.Worker;
5+
using Microsoft.Extensions.Logging;
6+
7+
namespace ByteSync.Functions.Timer;
8+
9+
public class RefreshMessageDefinitionsFunction
10+
{
11+
private readonly IMessageDefinitionsLoader _loader;
12+
private readonly IMessageDefinitionRepository _repository;
13+
private readonly ILogger<RefreshMessageDefinitionsFunction> _logger;
14+
15+
public RefreshMessageDefinitionsFunction(IMessageDefinitionsLoader loader, IMessageDefinitionRepository repository,
16+
ILogger<RefreshMessageDefinitionsFunction> logger)
17+
{
18+
_loader = loader;
19+
_repository = repository;
20+
_logger = logger;
21+
}
22+
23+
[Function("RefreshMessageDefinitionsFunction")]
24+
public async Task<int> RunAsync([TimerTrigger("0 0 */2 * * *"
25+
#if DEBUG
26+
, RunOnStartup = true
27+
#endif
28+
)] TimerInfo timerInfo)
29+
{
30+
var currentUtcTime = DateTime.UtcNow;
31+
_logger.LogInformation("Refreshing message definitions at: {Now}", currentUtcTime);
32+
33+
var messageDefinitions = await _loader.Load();
34+
var validMessageDefinitions = messageDefinitions.Where(d => d.EndDate > currentUtcTime).ToList();
35+
36+
await _repository.SaveAll(validMessageDefinitions);
37+
38+
return validMessageDefinitions.Count;
39+
}
40+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
namespace ByteSync.ServerCommon.Business.Messages;
2+
3+
public class MessageDefinition
4+
{
5+
public string Id { get; set; }
6+
7+
public DateTime StartDate { get; set; }
8+
9+
public DateTime EndDate { get; set; }
10+
11+
public Dictionary<string, string> Message { get; set; } = new();
12+
}

src/ByteSync.ServerCommon/Business/Settings/AppSettings.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ public class AppSettings
77
public int JwtDurationInSeconds { get; set; } = 3600;
88

99
public bool SkipClientsVersionCheck { get; set; } = false;
10-
10+
1111
public string UpdatesDefinitionUrl { get; set; } = "";
12+
13+
public string MessagesDefinitionsUrl { get; set; } = "";
1214
}

src/ByteSync.ServerCommon/Entities/EntityType.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,6 @@ public enum EntityType
1111
Client,
1212
ClientSoftwareVersionSettings,
1313
CloudSessionProfile,
14-
Lobby
14+
Lobby,
15+
MessageDefinition
1516
}

0 commit comments

Comments
 (0)