public TargetManager(string directory) { this.directory = directory; string manifestFile = Path.Combine(directory, "files.manifest"); if (!File.Exists(manifestFile)) { manifest = new TargetManifest(); Console.WriteLine("New manifest created"); } else { manifest = TargetManifest.FromJSON(File.ReadAllText(manifestFile)); Console.WriteLine("Manifest loaded from file"); } }
public Backup() { manifest = new TargetManifest(); DiscoverTimeout = 1000; connectAre = new AutoResetEvent(false); discoverAre = new AutoResetEvent(false); fileManifestAre = new AutoResetEvent(false); SynchronizationContext sync = new SynchronizationContext(); SynchronizationContext.SetSynchronizationContext(sync); NetPeerConfiguration cfg = new NetPeerConfiguration("BackupUtil"); cfg.Port = 6969; cfg.EnableMessageType(NetIncomingMessageType.DiscoveryResponse); client = new NetClient(cfg); client.RegisterReceivedCallback(new SendOrPostCallback(MessageReceived), sync); client.Start(); }
void MessageReceived(object peerObj) { NetPeer peer = (NetPeer)peerObj; NetIncomingMessage inc = peer.ReadMessage(); switch (inc.MessageType) { case NetIncomingMessageType.DebugMessage: case NetIncomingMessageType.VerboseDebugMessage: case NetIncomingMessageType.WarningMessage: case NetIncomingMessageType.ErrorMessage: Console.WriteLine($"Lidgren: {inc.ReadString()}"); break; case NetIncomingMessageType.DiscoveryResponse: if (awaitingRemote) { found = true; discoverAre.Set(); } break; case NetIncomingMessageType.StatusChanged: NetConnectionStatus status = (NetConnectionStatus)inc.ReadByte(); Console.WriteLine($"{inc.SenderEndPoint.ToString()}: {status.ToString()}"); string addit = inc.ReadString(); if (!string.IsNullOrEmpty(addit)) Console.WriteLine(addit); switch (status) { case NetConnectionStatus.Connected: if (awaitingApproval) { approved = true; connectAre.Set(); } IsConnected = true; Connected(this, new ConnectEventArgs(addit)); break; case NetConnectionStatus.Disconnected: if (awaitingApproval) { approved = false; error = addit; connectAre.Set(); } IsConnected = false; Disconnected(this, new ConnectEventArgs(addit)); break; } break; case NetIncomingMessageType.Data: ResponseType response = (ResponseType)inc.ReadInt32(); switch (response) { case ResponseType.TargetSafety: string targetName = inc.ReadString(); bool targetSafe = inc.ReadBoolean(); manifest.SetTargetSafe(targetName, targetSafe); TargetUpdated(this, new TargetUpdateEventArgs(manifest.GetTarget(targetName))); Console.WriteLine($"Remote confirmed target safety: {targetName}: {targetSafe}"); break; case ResponseType.Manifest: if (!awaitingManifest) break; manifest = TargetManifest.FromJSON(inc.ReadString()); fileManifestAre.Set(); break; } break; } peer.Recycle(inc); }