Skip to content

Commit ee9ddff

Browse files
committed
Revert some logic
1 parent 6c0b08f commit ee9ddff

1 file changed

Lines changed: 11 additions & 12 deletions

File tree

Common/Services/ControlSender.cs

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -111,17 +111,16 @@ private static void Clamp(Control control, SharePermsAndLimits? limits)
111111

112112
private async Task<OneOf<Success, ShockerNotFoundOrNoAccess, ShockerPaused, ShockerNoPermission>> ControlInternal(IReadOnlyList<Control> controls, ControlLogSender sender, IHubClients<IUserHub> hubClients, ControlShockerObj[] allowedShockers)
113113
{
114-
// Messages grouped by device
115-
var messages = new Dictionary<Guid, List<ShockerControlCommand>>();
116-
var logs = new Dictionary<Guid, List<ControlLog>>();
114+
var shockersById = allowedShockers.ToDictionary(s => s.ShockerId, s => s);
115+
117116
var now = DateTime.UtcNow;
117+
118+
var messagesByDevice = new Dictionary<Guid, List<ShockerControlCommand>>();
119+
var logsByOwner = new Dictionary<Guid, List<ControlLog>>();
118120

119-
foreach (var (control, shocker) in controls
120-
.Select(c => (Control: c, Shocker: allowedShockers.FirstOrDefault(s => s.ShockerId == c.Id)))
121-
.GroupBy(x => (ShockerId: x.Control.Id, x.Shocker?.ShockerRfId))
122-
.Select(x => x.Last()))
121+
foreach (var control in controls.DistinctBy(x => x.Id))
123122
{
124-
if (shocker is null)
123+
if (!shockersById.TryGetValue(control.Id, out var shocker))
125124
return new ShockerNotFoundOrNoAccess(control.Id);
126125

127126
if (shocker.Paused)
@@ -132,7 +131,7 @@ private async Task<OneOf<Success, ShockerNotFoundOrNoAccess, ShockerPaused, Shoc
132131

133132
Clamp(control, shocker.PermsAndLimits);
134133

135-
messages.AppendValue(shocker.DeviceId, new ShockerControlCommand
134+
messagesByDevice.AppendValue(shocker.DeviceId, new ShockerControlCommand
136135
{
137136
ShockerId = shocker.ShockerId,
138137
RfId = shocker.ShockerRfId,
@@ -142,7 +141,7 @@ private async Task<OneOf<Success, ShockerNotFoundOrNoAccess, ShockerPaused, Shoc
142141
Model = shocker.ShockerModel,
143142
Exclusive = control.Exclusive
144143
});
145-
logs.AppendValue(shocker.OwnerId, new ControlLog
144+
logsByOwner.AppendValue(shocker.OwnerId, new ControlLog
146145
{
147146
Shocker = new BasicShockerInfo
148147
{
@@ -173,8 +172,8 @@ private async Task<OneOf<Success, ShockerNotFoundOrNoAccess, ShockerPaused, Shoc
173172

174173
// Then send all network events
175174
await Task.WhenAll([
176-
..messages.Select(kvp => _publisher.SendDeviceControl(kvp.Key, kvp.Value)),
177-
..logs.Select(x => hubClients.User(x.Key.ToString()).Log(sender, x.Value))
175+
..messagesByDevice.Select(kvp => _publisher.SendDeviceControl(kvp.Key, kvp.Value)),
176+
..logsByOwner.Select(x => hubClients.User(x.Key.ToString()).Log(sender, x.Value))
178177
]);
179178

180179
return new Success();

0 commit comments

Comments
 (0)