示例#1
0
        public override void handleGETRequest(HttpProcessor p)
        {
            bool shouldCompressData = false;

            if ((String)p.httpHeaders["Accept-Encoding"] == "gzip")
            {
                shouldCompressData = true;
            }

            if (p.http_url.Contains(".txt"))
            {
                string[] allTextFiles = getTextFiles();

                string findFile = Path.GetFileName(p.http_url);

                bool         precoded     = false;
                encodingType dataEncoding = encodingType.Origin;

                if (findFile.Contains("Preconfig"))
                {
                    findFile = findFile.Remove(0, "Preconfig".Length);
                    precoded = true;
                }

                else
                {
                    if (findFile.Contains("Raw"))
                    {
                        int fileTypeLoc = findFile.ToLower().IndexOf("raw");
                        findFile     = findFile.Remove(fileTypeLoc, "Raw".Length);
                        dataEncoding = encodingType.Origin;
                    }
                }
                int strNumber = 0;
                int strIndex  = -1;

                for (strNumber = 0; strNumber < allTextFiles.Length; strNumber++)
                {
                    strIndex = allTextFiles[strNumber].ToLower().IndexOf(findFile.ToLower());
                    if (strIndex >= 0)
                    {
                        break;
                    }
                }
                // do the server have the file
                if (strIndex < 0)
                {
                    // the server cant find the required file
                    p.writeFailure();
                    return;
                }

                var textFileName   = allTextFiles[strNumber];
                var outputFileName = textFileName; // if it was encoded and compressed, it will be ready to be send

                Stream fs = null;
                try
                {
                    if (!precoded)
                    {
                        outputFileName = Path.GetTempFileName();



                        if (dataEncoding == encodingType.Origin)
                        {
                            outputFileName = textFileName;

                            if (shouldCompressData)
                            {
                                fs = new FileStream(outputFileName, FileMode.Open, FileAccess.Read, FileShare.Read);
                                FileInfo inputFileInfo = new FileInfo(outputFileName);
                                p.writeSuccess("text/plain", 0, shouldCompressData, useStandardHeaders);
                                p.outputStream.Flush();
                                FormatData.streamCopyToWithGzipCompression(fs, p.outputStream.BaseStream);
                                p.outputStream.Flush();
                                p.outputStream.BaseStream.Flush();
                            }


                            else
                            {
                                fs = File.Open(textFileName, FileMode.Open, FileAccess.Read, FileShare.Read);
                                FileInfo fileInfo = new FileInfo(outputFileName);
                                p.writeSuccess("text/plain", fileInfo.Length, shouldCompressData, useStandardHeaders);
                                p.outputStream.Flush();
                                fs.CopyTo(p.outputStream.BaseStream);
                            }
                        }
                    }


                    else // precoded and compressed
                    {
                        fs = File.Open(outputFileName, FileMode.Open);
                        FileInfo fileInfo = new FileInfo(outputFileName);
                        p.writeSuccess("text/plain", fileInfo.Length, shouldCompressData, useStandardHeaders);
                        p.outputStream.Flush();
                        fs.CopyTo(p.outputStream.BaseStream);
                    }
                }
                catch (IOException ex)
                {
                    Console.WriteLine("An error has occured {0}", ex.Message);
                }
                catch (Exception ex)
                {
                    Console.WriteLine("An error has occured {0}", ex.Message);
                }
                finally
                {
                    p.outputStream.BaseStream.Flush();
                    if (fs != null)
                    {
                        fs.Close();
                    }
                }
            }
            // if the client asks for autogenerated data
            else if (p.http_url.Contains("Auto"))
            {
                double[] ratios = null;
                if (p.httpHeaders["RatioType"].ToString() == "Manual")
                {
                    ratios    = new double[4];
                    ratios[0] = double.Parse(p.httpHeaders["A"].ToString());
                    ratios[1] = double.Parse(p.httpHeaders["C"].ToString());
                    ratios[2] = double.Parse(p.httpHeaders["G"].ToString());
                    ratios[3] = double.Parse(p.httpHeaders["T"].ToString());
                }
                long dataSize = long.Parse(p.httpHeaders["DataSize"].ToString());

                if (p.http_url.Contains("Raw"))
                {
                    // auto data generation
                    p.writeSuccess("text/plain", 0, shouldCompressData, useStandardHeaders);
                    p.outputStream.Flush();
                    FormatData.generateRawDataAndSend(p.outputStream.BaseStream, dataSize, shouldCompressData, ratios);
                    p.outputStream.BaseStream.Flush();
                    p.outputStream.Flush();

                    return;
                }

                else
                {
                    p.writeFailure();
                }
            }



            else
            {
                p.writeFailure();
            }
        }
示例#2
0
文件: v1_2.cs 项目: Civa/Zenith
 public Stream()
 {
     this.typeField = StreamType.locator;
     this.actuateField = StreamActuate.onRequest;
     this.encodingField = encodingType.none;
 }
示例#3
0
 WriteCharacterString(encodingType, value.AsSpan(), tag);