Exemple #1
0
        public Stream DeploySolutionPackage(Common.Solution solution, Stream messageBody)
        {
            String scope = solution.Name;

            try
            {
                //create temp dir
                String tempDir = Path.Combine(System.IO.Path.GetTempPath(), System.Guid.NewGuid().ToString());
                System.IO.Directory.CreateDirectory(tempDir);

                //save stream to file
                String packagePath = System.IO.Path.Combine(tempDir, "package.zip");
                using (FileStream tempZipFileStream = new FileStream(packagePath, FileMode.Create))
                {
                    messageBody.CopyTo(tempZipFileStream);
                }

                //unzip folder
                FileHelper.CreateUnzipFolder(packagePath, tempDir, "package");

                //deploy metadata
                String metadatafile = System.IO.Path.Combine(tempDir, "package", "metadata.xml");
                using (System.IO.FileStream fs = new FileStream(metadatafile, FileMode.Open))
                {
                    UploadMetadataInternal(solution, fs);
                }

                //deploy data
                String datafile = System.IO.Path.Combine(tempDir, "package", "data.xml");
                UploadDataInternal(solution, null, false, false, null, datafile);

                //deploy resources
                String resource       = System.IO.Path.Combine(tempDir, "package", "resource");
                String resourceFolder = System.IO.Path.Combine(solution.SolutionFolder, "resource");
                if (System.IO.Directory.Exists(resourceFolder))
                {
                    System.IO.Directory.Delete(resourceFolder, true);
                }
                System.IO.Directory.CreateDirectory(resourceFolder);
                DirectoryCopy.Copy(resource, resourceFolder, true);

                //apply resources
                new CodeFactory.Builder().Build(solution, true);

                return(Common.Utils.MakeTextAnswer("ok"));
            }
            catch (Exception e)
            {
                return(Common.Utils.MakeExceptionAnswer(e, scope));
            }
        }
Exemple #2
0
        private void ArchiveFileSystemInternal(Common.Solution solution)
        {
            String tempFolder = System.IO.Path.Combine(System.IO.Path.GetTempPath(), Guid.NewGuid().ToString());

            Directory.CreateDirectory(tempFolder);

            //we cant copy the entire "access" folder, "devices.txt" file should be excluded, so..
            System.IO.Directory.CreateDirectory(System.IO.Path.Combine(tempFolder, "access"));

            String passFile = System.IO.Path.Combine(solution.SolutionFolder, @"access\password.txt");

            if (System.IO.File.Exists(passFile))
            {
                System.IO.File.Copy(passFile, System.IO.Path.Combine(tempFolder, @"access\password.txt"));
            }

            String licFile = System.IO.Path.Combine(solution.SolutionFolder, @"access\licenses.txt");

            if (System.IO.File.Exists(licFile))
            {
                System.IO.File.Copy(licFile, System.IO.Path.Combine(tempFolder, @"access\licenses.txt"));
            }

            //DirectoryCopy.Copy(System.IO.Path.Combine(solution.SolutionFolder, "access"), System.IO.Path.Combine(tempFolder, "access"), true);
            DirectoryCopy.Copy(System.IO.Path.Combine(solution.SolutionFolder, "bin"), System.IO.Path.Combine(tempFolder, "bin"), true);
            DirectoryCopy.Copy(System.IO.Path.Combine(solution.SolutionFolder, "code"), System.IO.Path.Combine(tempFolder, "code"), true);
            DirectoryCopy.Copy(System.IO.Path.Combine(solution.SolutionFolder, "configuration"), System.IO.Path.Combine(tempFolder, "configuration"), true);
            DirectoryCopy.Copy(System.IO.Path.Combine(solution.SolutionFolder, "database"), System.IO.Path.Combine(tempFolder, "database"), true);
            //DirectoryCopy.Copy(System.IO.Path.Combine(solution.SolutionFolder, "log"), System.IO.Path.Combine(tempFolder, "log"), true);
            DirectoryCopy.Copy(System.IO.Path.Combine(solution.SolutionFolder, "resource"), System.IO.Path.Combine(tempFolder, "resource"), true);

            string zippingFilePath = tempFolder + "Solution.zip";

            FileHelper.CreateZipArchieve(tempFolder, zippingFilePath);

            UInt32 crc = Crc32.CRC(zippingFilePath);

            using (FileStream fs = new FileStream(zippingFilePath, FileMode.Open, FileAccess.Read))
            {
                byte[] bytes = new byte[fs.Length];
                fs.Read(bytes, 0, bytes.Length);

                using (SqlConnection conn = new SqlConnection(solution.ConnectionString))
                {
                    conn.Open();
                    using (SqlCommand cmd = new SqlCommand("SELECT CRC FROM [admin].[FileSystem] WHERE [Date] = (SELECT MAX([Date]) FROM [admin].[FileSystem])", conn))
                    {
                        object crcLast = cmd.ExecuteScalar();
                        if (crcLast != null)
                        {
                            if (crc.ToString().Equals(crcLast.ToString()))
                            {
                                return;
                            }
                        }
                    }

                    using (SqlCommand cmd = new SqlCommand("INSERT INTO [admin].[FileSystem]([Date],[Data],[CRC]) VALUES(@Date,@Data,@CRC)", conn))
                    {
                        cmd.Parameters.AddWithValue("@CRC", crc.ToString());
                        cmd.Parameters.AddWithValue("@Date", DateTime.UtcNow);
                        SqlParameter p = new SqlParameter("@Data", SqlDbType.VarBinary, bytes.Length, ParameterDirection.Input, false, 0, 0, null, DataRowVersion.Current, bytes);
                        cmd.Parameters.Add(p);
                        cmd.ExecuteNonQuery();
                    }
                }
            }
        }