コード例 #1
0
        public IList <PackageIndexError> AddPackage(IPackageMetadata package, bool force)
        {
            try
            {
                if (package == null)
                {
                    return(null);
                }

                // check if package exists in the index:
                //  - if it does not, proceed and add it
                //  - if it is, add to index only if new package has higher version
                var existingPackage = GetPackages(package.Id).FirstOrDefault();
                if (existingPackage != null)
                {
                    var existingPackageVersion = new SemanticVersion(existingPackage.Version);
                    var newPackageVersion      = new SemanticVersion(package.Version);
                    if (existingPackageVersion >= newPackageVersion && !force)
                    {
                        Logger.WriteVerbose("More recent version {0} of package {1} {2} exists in the index. Skipping...", existingPackageVersion.ToString(), package.Id, package.Version);
                        return(new List <PackageIndexError>());
                    }
                    else
                    {
                        // Remove all old packages types. This is for the case if new package does not
                        // contain some types (deprecated), in this case index would still keep them.
                        Logger.WriteVerbose("Older version {0} of package {1} {2} exists in the index. Removing from index...", existingPackageVersion.ToString(), package.Id, package.Version);
                        RemovePackage(package.Id);
                    }
                }

                Logger.WriteInformation("Adding package {0} {1} to index.", package.Id, package.Version);


                var reflector = ReflectorFactory.Create(package);
                foreach (var assembly in package.Assemblies)
                {
                    Logger.WriteVerbose("Processing assembly {0}.", assembly.FullPath);
                    reflector.ProcessAssembly(assembly);
                }

                Logger.WriteVerbose("Storing package model to the index.");
                var result = Engine.AddEntry(
                    new PackageModel
                {
                    Name    = package.Id,
                    Version = package.Version.ToString(),
                    Path    = package.LocalPath
                });

                Logger.WriteVerbose("Storing type models to the index.");
                result.AddRange(Engine.AddEntries(reflector.Types, false));

                Logger.WriteVerbose("Storing namespaces to the index.");
                result.AddRange(Engine.AddEntries(reflector.Namespaces, false));

                Logger.WriteVerbose("Storing extensions to the index.");
                result.AddRange(Engine.AddEntries(reflector.Extensions, true));

                Logger.WriteVerbose("Package indexing complete.");

                return(result);
            }
            catch (Exception e)
            {
                Debug.Write(e.ToString());
            }

            return(null);
        }
コード例 #2
0
        static void Main(string[] args)
        {
            var reflector     = ReflectorFactory.CreateReflectorB();
            var thinReflector = ReflectorFactory.CreateThinReflectorB();

            ThinRotor thinRotor = RotorFactory.CreateRotorBeta();

            Rotor slowRotor   = RotorFactory.CreateRotorI();
            Rotor middleRotor = RotorFactory.CreateRotorII();
            Rotor fastRotor   = RotorFactory.CreateRotorIII();

            var spindle = new Spindle(reflector, slowRotor, middleRotor, fastRotor);

            //var spindle = new Spindle(thinReflector, thinRotor, slowRotor, middleRotor, fastRotor);

            // Ringstellung.
            thinRotor.Offset   = ToI('A');
            slowRotor.Offset   = ToI('A');
            middleRotor.Offset = ToI('A');
            fastRotor.Offset   = ToI('A');

            const char thinRotorPosition   = 'A';
            const char slowRotorPosition   = 'A';
            const char middleRotorPosition = 'A';
            const char fastRotorPosition   = 'A';

            // Initial positions.
            thinRotor.Position   = ToI(thinRotorPosition);
            slowRotor.Position   = ToI(slowRotorPosition);
            middleRotor.Position = ToI(middleRotorPosition);
            fastRotor.Position   = ToI(fastRotorPosition);

            // Note: Enigma can only encrypt/decrypt the 26 letters of the alphabet.
            // (because of this all others: spaces, quotes, commas etc. are ignored)
            string plain = "The quick brown fox jumps over the lazy dog.";

            var plugs = new Dictionary <int, int>
            {
                //{ ToI('A'), ToI('B') },
                //{ ToI('C'), ToI('D') },
                //{ ToI('E'), ToI('F') },
                //{ ToI('G'), ToI('H') },
                //{ ToI('I'), ToI('J') },
                //{ ToI('K'), ToI('L') },
                //{ ToI('M'), ToI('N') },
                //{ ToI('O'), ToI('P') },
                //{ ToI('Q'), ToI('R') },
                //{ ToI('S'), ToI('T') },
                //{ ToI('U'), ToI('V') },
                //{ ToI('W'), ToI('X') },
                //{ ToI('Y'), ToI('Z') },
            };

            var plugboard = new Plugboard(spindle, plugs);

            string encrypted = String.Empty;

            Console.WriteLine("Encrypted:");

            // Encrypt.
            foreach (char c in plain)
            {
                int input = ToI(c);

                if ((input < 0) || (input > 25))
                {
                    // We cannot process this char.
                    continue;
                }

                var output = plugboard.Get(input);

                var ch = Convert.ToChar('A' + output);
                encrypted += ch;
                Console.Write(ch);
                Console.Write(' ');
            }

            Console.WriteLine();
            Console.WriteLine();
            Console.WriteLine("Decrypted:");

            // Reset rotor positions.
            thinRotor.Position   = ToI(thinRotorPosition);
            slowRotor.Position   = ToI(slowRotorPosition);
            middleRotor.Position = ToI(middleRotorPosition);
            fastRotor.Position   = ToI(fastRotorPosition);

            // Decrypt.
            foreach (char c in encrypted)
            {
                int input = ToI(c);

                var output = plugboard.Get(input);

                var ch = Convert.ToChar('A' + output);

                Console.Write(ch);
                Console.Write(' ');
            }

            Console.ReadKey();
        }