|
10 | 10 | using System.Diagnostics; |
11 | 11 | using System.Linq; |
12 | 12 | using System.Net; |
| 13 | +using System.Net.Sockets; |
13 | 14 | using System.Runtime.CompilerServices; |
14 | 15 | using System.Threading; |
15 | 16 | using System.Threading.Tasks; |
@@ -191,7 +192,7 @@ internal async void Update(byte[] data, ushort? startindex = null, ushort? count |
191 | 192 | try |
192 | 193 | { |
193 | 194 | if ((startindex + count) <= Data.Length) |
194 | | - Array.Copy(data, startindex.Value, Data, startindex.Value, count.Value); |
| 195 | + Array.Copy(data, 0, Data, startindex.Value, count.Value); |
195 | 196 | else |
196 | 197 | Array.Copy(data, 0, Data, 0, Math.Min(data.Length, Data.Length)); |
197 | 198 |
|
@@ -519,12 +520,20 @@ public async Task SendArtSync() |
519 | 520 | if (EnableSync) |
520 | 521 | await sendArtSync(); |
521 | 522 | } |
522 | | - private async Task sendArtSync() |
| 523 | + private async Task sendArtSync(params IPv4Address[] addresses) |
523 | 524 | { |
524 | 525 | if (this.IsDisposing || this.IsDisposed || this.IsDeactivated) |
525 | 526 | return; |
526 | 527 | using ArtSync artSync = new ArtSync(); |
527 | | - await TrySendBroadcastPacket(artSync); |
| 528 | + if (addresses.Length == 0) |
| 529 | + await TrySendBroadcastPacket(artSync); |
| 530 | + else |
| 531 | + { |
| 532 | + var smalArray = addresses.Distinct(); |
| 533 | + var networkClients = ArtNetInstance.NetworkClients.ToList(); |
| 534 | + var broadcastAddresses = smalArray.Select(a => networkClients.FirstOrDefault(n => Tools.IsInSubnet(a, n.IPv4Mask, n.LocalIpAddress)).BroadcastIpAddress).Distinct().ToList(); ; |
| 535 | + broadcastAddresses.ForEach(async (b) => await TrySendPacket(artSync, b)); |
| 536 | + } |
528 | 537 | } |
529 | 538 | #endregion |
530 | 539 |
|
|
0 commit comments