Ejemplo n.º 1
0
        /// <summary>
        /// Gets file to return in HTTP response
        /// </summary>
        /// <param name="file"></param>
        /// <param name="compressionFormat"></param>
        /// <param name="attachment"></param>
        /// <returns></returns>
        private static ResponseMessageResult GetFile(string file, string compressionFormat, bool attachment)
        {
            string logFolder = System.Web.Hosting.HostingEnvironment.MapPath("/Logs");

            if (!File.Exists(file))
            {
                return(null);
            }

            string compressedFile = "";

            try
            {
                HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK);
                switch (compressionFormat)
                {
                case "gzip":
                    compressedFile = Path.Combine(logFolder, string.Format("{0}.zip", Guid.NewGuid().ToString()));
                    CompressionUtilities.CompressGZipToFile(file, compressedFile);
                    result.Content = new System.Net.Http.ByteArrayContent(System.IO.File.ReadAllBytes(compressedFile));
                    result.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/octet-stream");

                    // Return as attachment
                    if (attachment)
                    {
                        result.Content.Headers.Add("Content-Encoding", "gzip");
                    }

                    break;

                default:
                    result.Content = new System.Net.Http.ByteArrayContent(System.IO.File.ReadAllBytes(file));
                    result.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/octet-stream");

                    break;
                }

                if (attachment)
                {
                    result.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment")
                    {
                        FileName = Path.GetFileName(file)
                    };
                }

                return(new System.Web.Http.Results.ResponseMessageResult(result));
            }
            finally
            {
                // Clean up
                if (!String.IsNullOrEmpty(compressedFile) && File.Exists(compressedFile))
                {
                    File.Delete(compressedFile);
                }
            }
        }
Ejemplo n.º 2
0
    public static void Main(String [] args)
    {
        var compressedString   = CompressionUtilities.Compress("Hello");
        var uncompressedString = CompressionUtilities.Decompress(compressedString);

        Console.WriteLine(uncompressedString);
        compressedString   = CompressionUtilities.CompressGZip("Hello GZip");
        uncompressedString = CompressionUtilities.DecompressGZip(compressedString);
        Console.WriteLine(uncompressedString);
    }
Ejemplo n.º 3
0
        public byte[] ToCompressedRawByteArray()
        {
            int bytesNeeded = (m_visibilityFlags.Length + 7) / 8;

            byte[] uncompressedBytes = new byte[bytesNeeded];

            m_visibilityFlags.CopyTo(uncompressedBytes, 0);

            return(CompressionUtilities.RunLengthEncodeByteArray(uncompressedBytes, CompressionUtilities.eEncodeType.Ones, null));
        }
Ejemplo n.º 4
0
        public static PotentiallyVisibleSet FromCompressedRawByteArray(uint setSize, byte[] compressedBytes)
        {
            PotentiallyVisibleSet pvs = new PotentiallyVisibleSet();

            byte[] uncompressedBytes =
                CompressionUtilities.RunLengthDecodeByteArray(
                    compressedBytes, CompressionUtilities.eEncodeType.Ones, null);

            pvs.m_visibilityFlags        = new BitArray(uncompressedBytes);
            pvs.m_visibilityFlags.Length = BitsNeededForSetSize(setSize);
            pvs.m_setSize = setSize;

            return(pvs);
        }
Ejemplo n.º 5
0
        private void NavCellsFromCompressedRawByteArray(
            byte[] compressedNavCells)
        {
            byte[] header       = new byte[COMPRESSED_DATA_HEADER_BYTE_COUNT];
            byte[] uncompressed =
                CompressionUtilities.RunLengthDecodeByteArray(
                    compressedNavCells,
                    CompressionUtilities.eEncodeType.Zeros,
                    header);
            BitArray navCellData = new BitArray(uncompressed);

            // Read out the header
            Debug.Assert(COMPRESSED_DATA_HEADER_BYTE_COUNT == 2);
            uint colomnCount = (uint)header[0];
            uint rowCount    = (uint)header[1];

            // Compute derived room properties
            int   navCellCount = (int)(rowCount * colomnCount);
            float roomWidth    = (float)colomnCount * GameConstants.NAV_MESH_WORLD_UNITS_SIZE;
            float roomHeight   = (float)rowCount * GameConstants.NAV_MESH_WORLD_UNITS_SIZE;

            // Initialize the nav cell derived data
            m_colomnCount          = colomnCount;
            m_rowCount             = rowCount;
            m_nonEmptyNavCellCount = 0;
            m_roomKey     = null;
            m_boundingBox = new AABB3d();
            m_boundingBox.SetBounds2d(-roomWidth / 2.0f, -roomHeight / 2.0f, roomWidth / 2.0f, roomHeight / 2.0f);

            // Truncate extra bits added due to the bit array getting rounded up to the nearest byte
            navCellData.Length = navCellCount;

            // Compute the connectivity data from the nav cell bit array
            NavMesh.BuildNavCellConnectivityGrid(
                colomnCount,
                rowCount,
                navCellData,
                out m_navCells,
                out m_nonEmptyNavCellCount);
        }
Ejemplo n.º 6
0
        private byte[] NavCellsToCompressedRawByteArray()
        {
            byte[] compressed = null;

            if (m_navCells != null)
            {
                BitArray validNavCellFlags    = new BitArray(m_navCells.Length);
                int      navCellBytesNeeded   = (m_navCells.Length + 7) / 8;
                byte[]   uncompressedNavCells = new byte[navCellBytesNeeded];

                // Store the header first in the buffer
                Debug.Assert(m_colomnCount < 256);
                Debug.Assert(m_rowCount < 256);
                Debug.Assert(COMPRESSED_DATA_HEADER_BYTE_COUNT == 2);
                byte[] header = new byte[COMPRESSED_DATA_HEADER_BYTE_COUNT];
                header[0] = (byte)m_colomnCount;
                header[1] = (byte)m_rowCount;

                // Store the nav cells as a simple valid/invalid bit array.
                // The connectivity info can be recomputed from this.
                for (int navCellIndex = 0; navCellIndex < m_navCells.Length; navCellIndex++)
                {
                    validNavCellFlags.Set(navCellIndex, m_navCells[navCellIndex].connectivityId != EMPTY_NAV_CELL);
                }

                validNavCellFlags.CopyTo(uncompressedNavCells, 0);

                compressed =
                    CompressionUtilities.RunLengthEncodeByteArray(
                        uncompressedNavCells,
                        CompressionUtilities.eEncodeType.Zeros,
                        header);
            }

            return(compressed);
        }
Ejemplo n.º 7
0
        public IHttpActionResult Post([FromUri] Guid scenarioId,
                                      [FromBody] OutputFileSQLFilterModel command)
        {
            if (command == null || !ModelState.IsValid)
            {
                return(this.Error().InvalidParameters("Invalid parameters"));
            }

            ScenarioResult scenarioResult = _scenarioResultRepository.Find(scenarioId);

            if (scenarioResult == null)
            {
                return(NotFound());
            }

            if (String.IsNullOrEmpty(command.SQL))
            {
                return(this.Error().InvalidParameters("SQL is invalid"));
            }

            // Get temp data folder
            string tempFolder        = System.Web.Hosting.HostingEnvironment.MapPath("/Temp");
            string outputFilesFolder = string.Format(@"{0}\OutputFiles", tempFolder);

            SQLOutputFileFilterSettings filterSettings = null;

            string compressedResultsFile = "";

            LocalOutputFiles localOutputFiles = new LocalOutputFiles(_resultsFileRepository, outputFilesFolder);

            try
            {
                // Set filter settings,
                filterSettings = new SQLOutputFileFilterSettings()
                {
                    OutputFileFolder = string.Format(@"{0}\{1}\Data", outputFilesFolder, scenarioId),                       // Same folder that LocalOutputFileStorage stores files
                    SQL         = command.SQL,                                                                              // "select * from lmkii_spot_reqm.txt",
                    ResultsFile = string.Format(@"{0}\{1}\Results-{2}.txt", outputFilesFolder, scenarioId, Guid.NewGuid()), // Make unique in case two instances are querying
                    Delimiter   = ','
                };

                // Download all output files referenced by query
                localOutputFiles.GetOutputFiles(scenarioId, false, GetOutputFilesForSQL(filterSettings.SQL));

                // Apply filter
                SQLOutputFileFilter filter = new SQLOutputFileFilter();
                filter.Filter(filterSettings);

                /*
                 * var result = new HttpResponseMessage(HttpStatusCode.Created)
                 * {
                 *  Content = new System.Net.Http.ByteArrayContent(System.IO.File.ReadAllBytes(filterSettings.OutputFile)),
                 * };
                 */
                // Return results

                /*
                 * System.IO.Stream compressedStream = CompressionUtilities.CompressGZip(System.IO.File.OpenRead(filterSettings.OutputFile));
                 * var result = new HttpResponseMessage(HttpStatusCode.Created)
                 * {
                 *  Content = new System.Net.Http.StreamContent(compressedStream)
                 * };
                 *
                 * result.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/octet-stream");
                 * result.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment")
                 * {
                 *  FileName = string.Format("Results-{0}.zip", id),
                 * };
                 */

                // Return file
                compressedResultsFile = System.IO.Path.Combine(outputFilesFolder, string.Format("{0}.zip", Guid.NewGuid()));
                CompressionUtilities.CompressGZipToFile(filterSettings.ResultsFile, compressedResultsFile);
                HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK)
                {
                    Content = new ByteArrayContent(System.IO.File.ReadAllBytes(compressedResultsFile))
                };
                result.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/octet-stream");
                return(new System.Web.Http.Results.ResponseMessageResult(result));
            }
            finally
            {
                // Clean up
                localOutputFiles.DeleteOutputFiles(scenarioId);

                // Delete uncompressed results file
                if (!String.IsNullOrEmpty(filterSettings?.ResultsFile) && System.IO.File.Exists(filterSettings.ResultsFile))
                {
                    System.IO.File.Delete(filterSettings.ResultsFile);
                }

                // Delete compressed results file
                if (!String.IsNullOrEmpty(compressedResultsFile) && System.IO.File.Exists(compressedResultsFile))
                {
                    System.IO.File.Delete(compressedResultsFile);
                }
            }
        }