예제 #1
0
        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");
            }
        }
예제 #2
0
        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();
        }
예제 #3
0
        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);
        }