예제 #1
0
        public void MSECParserTest()
        {
            var stream = string.Join("\r\n", new string[] {
                "",
                "# comment",
                "",
                "sector Sector Name",
                "domain Domain of Function",
                "alpha Q1",
                "beta Q2",
                "gamma Q3",
                "delta Q4",
                "",
                "ally X7 Seven Evil Exes",
                "border 0001 0002 0003 0004",
                "border 0000 0001 0002 0003",
                "       0004 0005 0006 blue",
                "route 0101 0202",
                "route -1 -1 3240 1 1 0101 red",
                "label 0123 Your text here"
            }).ToStream(Encoding.UTF8);

            Assert.AreEqual("MSEC", SectorMetadataFileParser.SniffType(stream));
            Sector sector = SectorMetadataFileParser.ForType("MSEC").Parse(stream);

            Assert.AreEqual(1, sector.Names.Count);
            Assert.AreEqual("Sector Name", sector.Names[0].Text);

            Assert.AreEqual(1, sector.Allegiances.Count);
            Assert.AreEqual("X7", sector.Allegiances[0].T5Code);
            Assert.AreEqual("Seven Evil Exes", sector.Allegiances[0].Name);

            Assert.AreEqual(2, sector.Borders.Count);
            Assert.AreEqual("0001 0002 0003 0004", sector.Borders[0].PathString);
            Assert.AreEqual("0000 0001 0002 0003 0004 0005 0006", sector.Borders[1].PathString);
            Assert.AreEqual("Blue", sector.Borders[1].ColorHtml);

            Assert.AreEqual(2, sector.Routes.Count);
            Assert.AreEqual(new Point(0, 0), sector.Routes[0].StartOffset);
            Assert.AreEqual(0101, sector.Routes[0].Start.ToInt());
            Assert.AreEqual(0202, sector.Routes[0].End.ToInt());
            Assert.AreEqual(new Point(0, 0), sector.Routes[0].EndOffset);
            Assert.AreEqual(new Point(-1, -1), sector.Routes[1].StartOffset);
            Assert.AreEqual(3240, sector.Routes[1].Start.ToInt());
            Assert.AreEqual(0101, sector.Routes[1].End.ToInt());
            Assert.AreEqual(new Point(1, 1), sector.Routes[1].EndOffset);
            Assert.AreEqual("Red", sector.Routes[1].ColorHtml);

            Assert.AreEqual(1, sector.Labels.Count);
            Assert.AreEqual("Your text here", sector.Labels[0].Text);
        }
예제 #2
0
            public override void Process()
            {
                // NOTE: This (re)initializes a static data structure used for
                // resolving names into sector locations, so needs to be run
                // before any other objects (e.g. Worlds) are loaded.
                ResourceManager resourceManager = new ResourceManager(context.Server);

                SectorMap.Milieu map = SectorMap.ForMilieu(resourceManager, GetStringOption("milieu"));
                Sector           sector;

                if (context.Request.HttpMethod == "POST")
                {
                    var type   = SectorMetadataFileParser.SniffType(context.Request.InputStream);
                    var parser = SectorMetadataFileParser.ForType(type);
                    using (var reader = new System.IO.StreamReader(context.Request.InputStream, context.Request.ContentEncoding))
                    {
                        sector = parser.Parse(reader);
                    }
                }
                else if (HasOption("sx") && HasOption("sy"))
                {
                    int sx = GetIntOption("sx", 0);
                    int sy = GetIntOption("sy", 0);

                    sector = map.FromLocation(sx, sy);

                    if (sector == null)
                    {
                        throw new HttpError(404, "Not Found", string.Format("The sector at {0},{1} was not found.", sx, sy));
                    }
                }
                else if (HasOption("sector"))
                {
                    string sectorName = GetStringOption("sector");
                    sector = map.FromName(sectorName);

                    if (sector == null)
                    {
                        throw new HttpError(404, "Not Found", string.Format("The specified sector '{0}' was not found.", sectorName));
                    }
                }
                else
                {
                    throw new HttpError(400, "Bad Request", "No sector specified.");
                }

                SendResult(context, new Results.SectorMetadata(sector, sector.GetWorlds(resourceManager, cacheResults: true)));
            }
예제 #3
0
            protected static Sector GetPostedSector(HttpRequest request, ErrorLogger errors)
            {
                Sector sector = null;

                if (request.Files["file"] != null && request.Files["file"].ContentLength > 0)
                {
                    HttpPostedFile hpf = request.Files["file"];
                    sector = new Sector(hpf.InputStream, hpf.ContentType, errors);
                }
                else if (!string.IsNullOrEmpty(request.Form["data"]))
                {
                    string data = request.Form["data"];
                    sector = new Sector(data.ToStream(), ContentTypes.Text.Plain, errors);
                }
                else if (new ContentType(request.ContentType).MediaType == ContentTypes.Text.Plain)
                {
                    sector = new Sector(request.InputStream, ContentTypes.Text.Plain, errors);
                }
                else
                {
                    return(null);
                }

                if (request.Files["metadata"] != null && request.Files["metadata"].ContentLength > 0)
                {
                    HttpPostedFile hpf = request.Files["metadata"];

                    string type = SectorMetadataFileParser.SniffType(hpf.InputStream);
                    Sector meta = SectorMetadataFileParser.ForType(type).Parse(hpf.InputStream);
                    sector.Merge(meta);
                }
                else if (!string.IsNullOrEmpty(request.Form["metadata"]))
                {
                    string metadata = request.Form["metadata"];
                    string type     = SectorMetadataFileParser.SniffType(metadata.ToStream());
                    var    parser   = SectorMetadataFileParser.ForType(type);
                    using (var reader = new StringReader(metadata))
                    {
                        Sector meta = parser.Parse(reader);
                        sector.Merge(meta);
                    }
                }

                return(sector);
            }
예제 #4
0
        protected Sector GetPostedSector()
        {
            Sector sector = null;

            if (Request.ContentType.StartsWith("multipart/form-data") &&
                Request.Files["file"] != null && Request.Files["file"].ContentLength > 0)
            {
                HttpPostedFile hpf = Request.Files["file"];
                sector = new Sector(hpf.InputStream, hpf.ContentType);

                if (Request.Files["metadata"] != null && Request.Files["metadata"].ContentLength > 0)
                {
                    hpf = Request.Files["metadata"];

                    string type = SectorMetadataFileParser.SniffType(hpf.InputStream);
                    Sector meta = SectorMetadataFileParser.ForType(type).Parse(hpf.InputStream);
                    sector.Merge(meta);
                }
            }
            else if (Request.ContentType == "application/x-www-form-urlencoded" &&
                     Request.Form["data"] != null)
            {
                string data = Request.Form["data"];
                sector = new Sector(data.ToStream(), MediaTypeNames.Text.Plain);

                if (!String.IsNullOrEmpty(Request.Form["metadata"]))
                {
                    string metadata = Request.Form["metadata"];
                    string type     = SectorMetadataFileParser.SniffType(metadata.ToStream());
                    var    parser   = SectorMetadataFileParser.ForType(type);
                    using (var reader = new StringReader(metadata))
                    {
                        Sector meta = parser.Parse(reader);
                        sector.Merge(meta);
                    }
                }
            }
            else if (Request.ContentType == MediaTypeNames.Text.Plain)
            {
                sector = new Sector(Request.InputStream, MediaTypeNames.Text.Plain);
            }
            return(sector);
        }