Horizon – Diff between revs 11 and 12
?pathlinks?
Rev 11 | Rev 12 | |||
---|---|---|---|---|
Line 1... | Line 1... | |||
1 | using System; |
1 | using System; |
|
2 | using System.Collections.Generic; |
2 | using System.Collections.Generic; |
|
3 | using System.Collections.Specialized; |
3 | using System.Collections.Specialized; |
|
4 | using System.ComponentModel; |
4 | using System.ComponentModel; |
|
5 | using System.Data.SQLite; |
5 | using System.Data.SQLite; |
|
- | 6 | using System.Diagnostics; |
||
6 | using System.Drawing; |
7 | using System.Drawing; |
|
7 | using System.IO; |
8 | using System.IO; |
|
8 | using System.Linq; |
9 | using System.Linq; |
|
9 | using System.Net; |
10 | using System.Net; |
|
10 | using System.Reflection; |
11 | using System.Reflection; |
|
- | 12 | using System.Text; |
||
11 | using System.Threading; |
13 | using System.Threading; |
|
12 | using System.Threading.Tasks; |
14 | using System.Threading.Tasks; |
|
13 | using System.Threading.Tasks.Dataflow; |
15 | using System.Threading.Tasks.Dataflow; |
|
14 | using System.Windows.Forms; |
16 | using System.Windows.Forms; |
|
15 | using Horizon.Database; |
17 | using Horizon.Database; |
|
16 | using Horizon.Snapshots; |
18 | using Horizon.Snapshots; |
|
17 | using Horizon.Utilities; |
19 | using Horizon.Utilities; |
|
18 | using Horizon.Utilities.Serialization; |
20 | using Horizon.Utilities.Serialization; |
|
- | 21 | using Mono.Zeroconf; |
||
19 | using NetSparkleUpdater; |
22 | using NetSparkleUpdater; |
|
20 | using NetSparkleUpdater.Enums; |
23 | using NetSparkleUpdater.Enums; |
|
21 | using NetSparkleUpdater.SignatureVerifiers; |
24 | using NetSparkleUpdater.SignatureVerifiers; |
|
22 | using NetSparkleUpdater.UI.WinForms; |
25 | using NetSparkleUpdater.UI.WinForms; |
|
- | 26 | using Newtonsoft.Json; |
||
23 | using Serilog; |
27 | using Serilog; |
|
24 | using TrackedFolders; |
28 | using TrackedFolders; |
|
- | 29 | using WatsonTcp; |
||
- | 30 | using static Horizon.Utilities.Networking.Miscellaneous; |
||
25 | using CaptureMode = Configuration.CaptureMode; |
31 | using CaptureMode = Configuration.CaptureMode; |
|
26 | using Path = System.IO.Path; |
32 | using Path = System.IO.Path; |
|
Line 27... | Line 33... | |||
27 | |
33 | |
|
28 | namespace Horizon |
34 | namespace Horizon |
|
Line 69... | Line 75... | |||
69 | |
75 | |
|
Line 70... | Line 76... | |||
70 | private LogViewForm _logViewForm; |
76 | private LogViewForm _logViewForm; |
|
Line -... | Line 77... | |||
- | 77 | |
||
- | 78 | private readonly LogMemorySink _memorySink; |
||
- | 79 | |
||
- | 80 | private RegisterService _horizonDiscoveryService; |
||
71 | |
81 | |
|
Line 72... | Line 82... | |||
72 | private readonly LogMemorySink _memorySink; |
82 | private WatsonTcpServer _horizonNetworkShare; |
|
Line 73... | Line 83... | |||
73 | |
83 | |
|
Line 148... | Line 158... | |||
148 | |
158 | |
|
Line 149... | Line 159... | |||
149 | #endregion |
159 | #endregion |
|
Line -... | Line 160... | |||
- | 160 | |
||
- | 161 | #region Event Handlers |
||
- | 162 | |
||
- | 163 | private void networkSharingToolStripMenuItem_CheckStateChanged(object sender, EventArgs e) |
||
- | 164 | { |
||
- | 165 | var toolStripMenuItem = (ToolStripMenuItem)sender; |
||
- | 166 | |
||
- | 167 | switch (toolStripMenuItem.CheckState) |
||
- | 168 | { |
||
- | 169 | case CheckState.Checked: |
||
- | 170 | var freePort = GetAvailableTcpPort(); |
||
- | 171 | |
||
- | 172 | _horizonNetworkShare = new WatsonTcpServer("0.0.0.0", freePort); |
||
- | 173 | _horizonNetworkShare.Events.ClientConnected += Events_ClientConnected; |
||
- | 174 | _horizonNetworkShare.Events.ClientDisconnected += Events_ClientDisconnected; |
||
- | 175 | _horizonNetworkShare.Events.MessageReceived += Events_MessageReceived; |
||
- | 176 | #pragma warning disable CS4014 |
||
- | 177 | _horizonNetworkShare.Start(); |
||
- | 178 | #pragma warning restore CS4014 |
||
- | 179 | |
||
- | 180 | try |
||
- | 181 | { |
||
- | 182 | _horizonDiscoveryService = new RegisterService(); |
||
- | 183 | _horizonDiscoveryService.Name = $"Horizon ({Environment.MachineName})"; |
||
- | 184 | _horizonDiscoveryService.RegType = "_horizon._tcp"; |
||
- | 185 | _horizonDiscoveryService.ReplyDomain = "local."; |
||
- | 186 | _horizonDiscoveryService.UPort = freePort; |
||
- | 187 | _horizonDiscoveryService.Register(); |
||
- | 188 | } |
||
- | 189 | catch (Exception exception) |
||
- | 190 | { |
||
- | 191 | Log.Error(exception, "Service discovery protocol could not be stared."); |
||
- | 192 | } |
||
- | 193 | |
||
- | 194 | Configuration.NetworkSharing = true; |
||
- | 195 | break; |
||
- | 196 | case CheckState.Unchecked: |
||
- | 197 | if (_horizonNetworkShare != null) |
||
- | 198 | { |
||
- | 199 | _horizonNetworkShare.Dispose(); |
||
- | 200 | _horizonNetworkShare = null; |
||
- | 201 | } |
||
- | 202 | |
||
- | 203 | if (_horizonDiscoveryService != null) |
||
- | 204 | { |
||
- | 205 | _horizonDiscoveryService.Dispose(); |
||
- | 206 | _horizonDiscoveryService = null; |
||
- | 207 | |
||
- | 208 | } |
||
- | 209 | |
||
- | 210 | Configuration.NetworkSharing = false; |
||
- | 211 | break; |
||
- | 212 | } |
||
- | 213 | |
||
- | 214 | ChangedConfigurationContinuation.Schedule(TimeSpan.FromSeconds(1), |
||
- | 215 | async () => { await SaveConfiguration(); }, _cancellationToken); |
||
- | 216 | } |
||
- | 217 | |
||
- | 218 | private async void Events_MessageReceived(object sender, MessageReceivedEventArgs e) |
||
- | 219 | { |
||
- | 220 | Log.Information($"Client {e.Client.IpPort} sent {e.Data.Length} bytes via network sharing."); |
||
- | 221 | |
||
- | 222 | if (e.Data.Length == 0) |
||
- | 223 | { |
||
- | 224 | return; |
||
- | 225 | } |
||
- | 226 | |
||
- | 227 | try |
||
- | 228 | { |
||
- | 229 | var payload = Encoding.UTF8.GetString(e.Data); |
||
- | 230 | |
||
- | 231 | var completeSnapshot = JsonConvert.DeserializeObject<TransferSnapshot>(payload); |
||
- | 232 | |
||
- | 233 | await _snapshotDatabase.SetCompleteSnapshotAsync(completeSnapshot, _cancellationToken); |
||
- | 234 | |
||
- | 235 | Log.Information($"Stored {completeSnapshot.Name} from {e.Client.IpPort}"); |
||
- | 236 | } |
||
- | 237 | catch (Exception exception) |
||
- | 238 | { |
||
- | 239 | Log.Error(exception, $"Failed to process network share from {e.Client.IpPort}."); |
||
- | 240 | } |
||
- | 241 | } |
||
- | 242 | |
||
- | 243 | private void Events_ClientDisconnected(object sender, WatsonTcp.DisconnectionEventArgs e) |
||
- | 244 | { |
||
- | 245 | Log.Information($"Client {e.Client.IpPort} disconnected from network sharing."); |
||
- | 246 | } |
||
- | 247 | |
||
- | 248 | private void Events_ClientConnected(object sender, WatsonTcp.ConnectionEventArgs e) |
||
- | 249 | { |
||
150 | |
250 | Log.Information($"Client {e.Client.IpPort} connected to network sharing."); |
|
151 | #region Event Handlers |
251 | } |
|
152 | |
252 | |
|
153 | private void WindowToolStripMenuItem_Click(object sender, EventArgs e) |
253 | private void WindowToolStripMenuItem_Click(object sender, EventArgs e) |
|
Line 287... | Line 387... | |||
287 | atomicOperationsToolStripMenuItem.Checked = Configuration.AtomicOperations; |
387 | atomicOperationsToolStripMenuItem.Checked = Configuration.AtomicOperations; |
|
288 | enableToolStripMenuItem.Checked = Configuration.Enabled; |
388 | enableToolStripMenuItem.Checked = Configuration.Enabled; |
|
289 | showBalloonTooltipsToolStripMenuItem.Checked = Configuration.Enabled; |
389 | showBalloonTooltipsToolStripMenuItem.Checked = Configuration.Enabled; |
|
290 | windowToolStripMenuItem.Checked = Configuration.CaptureMode == CaptureMode.Window; |
390 | windowToolStripMenuItem.Checked = Configuration.CaptureMode == CaptureMode.Window; |
|
291 | screenToolStripMenuItem.Checked = Configuration.CaptureMode == CaptureMode.Screen; |
391 | screenToolStripMenuItem.Checked = Configuration.CaptureMode == CaptureMode.Screen; |
|
- | 392 | networkSharingToolStripMenuItem.Checked = Configuration.NetworkSharing; |
||
Line 292... | Line 393... | |||
292 | |
393 | |
|
293 | // Load all tracked folders. |
394 | // Load all tracked folders. |
|
Line 294... | Line 395... | |||
294 | var folders = await LoadFolders(); |
395 | var folders = await LoadFolders(); |