public virtual int GetMaxRegionSize()
 {
     return(m_localService.GetMaxRegionSize());
 }
示例#2
0
        public byte[] MapAPIRequest(string path, Stream request, OSHttpRequest httpRequest, OSHttpResponse httpResponse)
        {
            byte[] response = MainServer.BlankResponse;

            string var         = httpRequest.Query["var"].ToString();
            string requestType = path.Substring(0, path.IndexOf("?"));

            if (requestType == "/MapAPI/get-region-coords-by-name")
            {
                string resp     = "var {0} = {\"x\":{1},\"y\":{2}};";
                string sim_name = httpRequest.Query["sim_name"].ToString();
                var    region   = m_gridService.GetRegionByName(null, sim_name);
                if (region == null)
                {
                    resp = "var " + var + " = {error: true};";
                }
                else
                {
                    resp = "var " + var + " = {\"x\":" + region.RegionLocX + ",\"y\":" + region.RegionLocY + "};";
                }
                response = System.Text.Encoding.UTF8.GetBytes(resp);
                httpResponse.ContentType = "text/javascript";
            }
            else if (requestType == "/MapAPI/get-region-name-by-coords")
            {
                string resp   = "var {0} = \"{1}\";";
                int    grid_x = int.Parse(httpRequest.Query["grid_x"].ToString());
                int    grid_y = int.Parse(httpRequest.Query["grid_y"].ToString());
                var    region = m_gridService.GetRegionByPosition(null,
                                                                  grid_x * Constants.RegionSize,
                                                                  grid_y * Constants.RegionSize);
                if (region == null)
                {
                    List <GridRegion> regions = m_gridService.GetRegionRange(null,
                                                                             (grid_x * Constants.RegionSize) -
                                                                             (m_gridService.GetMaxRegionSize()),
                                                                             (grid_x * Constants.RegionSize),
                                                                             (grid_y * Constants.RegionSize) -
                                                                             (m_gridService.GetMaxRegionSize()),
                                                                             (grid_y * Constants.RegionSize));
                    bool found = false;
                    foreach (var r in regions)
                    {
                        if (r.PointIsInRegion(grid_x * Constants.RegionSize, grid_y * Constants.RegionSize))
                        {
                            resp  = string.Format(resp, var, r.RegionName);
                            found = true;
                            break;
                        }
                    }
                    if (!found)
                    {
                        resp = "var " + var + " = {error: true};";
                    }
                }
                else
                {
                    resp = string.Format(resp, var, region.RegionName);
                }
                response = System.Text.Encoding.UTF8.GetBytes(resp);
                httpResponse.ContentType = "text/javascript";
            }

            return(response);
        }
示例#3
0
        public byte [] MapAPIRequest(string path, Stream request, OSHttpRequest httpRequest, OSHttpResponse httpResponse)
        {
            byte [] response = MainServer.BlankResponse;

            var resp        = "var {0} = {{regionName:\"{1}\",xloc:\"{2}\",yloc:\"{3}\",xsize:\"{4}\",ysize:\"{5}\"}};";
            var varName     = httpRequest.Query ["var"].ToString();
            var requestType = path.Substring(0, path.IndexOf("?", StringComparison.Ordinal));

            if (requestType == "/MapAPI/get-region-coords-by-name")
            {
                string sim_name = httpRequest.Query ["sim_name"].ToString();
                var    region   = m_gridService.GetRegionByName(null, sim_name);
                if (region == null)
                {
                    resp = "var " + varName + "={error: true};";
                }
                else
                {
                    resp = string.Format(resp, varName, region.RegionName,
                                         region.RegionLocX / Constants.RegionSize, region.RegionLocY / Constants.RegionSize,
                                         region.RegionSizeX, region.RegionSizeY);
                }
                response = System.Text.Encoding.UTF8.GetBytes(resp);
                httpResponse.ContentType = "text/javascript";
            }
            else if (requestType == "/MapAPI/get-region-name-by-coords")
            {
                int grid_x = int.Parse(httpRequest.Query ["grid_x"].ToString());
                int grid_y = int.Parse(httpRequest.Query ["grid_y"].ToString());
                var region = m_gridService.GetRegionByPosition(null,
                                                               grid_x * Constants.RegionSize,
                                                               grid_y * Constants.RegionSize);
                if (region == null)
                {
                    var maxRegionSize         = m_gridService.GetMaxRegionSize();
                    List <GridRegion> regions = m_gridService.GetRegionRange(null,
                                                                             (grid_x * Constants.RegionSize) - maxRegionSize,
                                                                             (grid_x * Constants.RegionSize) + maxRegionSize,
                                                                             (grid_y * Constants.RegionSize) - maxRegionSize,
                                                                             (grid_y * Constants.RegionSize) + maxRegionSize);
                    bool found = false;
                    foreach (var r in regions)
                    {
                        if (r.PointIsInRegion(grid_x * Constants.RegionSize, grid_y * Constants.RegionSize))
                        {
                            resp = string.Format(resp, varName, r.RegionName,
                                                 r.RegionLocX / Constants.RegionSize, r.RegionLocY / Constants.RegionSize,
                                                 r.RegionSizeX, r.RegionSizeY);
                            found = true;
                            break;
                        }
                    }
                    if (!found)
                    {
                        resp = "var " + varName + "={error: true};";
                    }
                }
                else
                {
                    resp = string.Format(resp, varName, region.RegionName,
                                         region.RegionLocX / Constants.RegionSize, region.RegionLocY / Constants.RegionSize,
                                         region.RegionSizeX, region.RegionSizeY);
                }
                response = System.Text.Encoding.UTF8.GetBytes(resp);
                httpResponse.ContentType = "text/javascript";
            }

            return(response);
        }