public ServerNeighborhoodProvider([Named("ShardId")] int shardId, IRealestateDomain realestate, IDAFactory daFactory, IServerNFSProvider nfs)
        {
            OnMissingLazyLoad    = true;
            OnLazyLoadCacheValue = false;

            ShardId          = shardId;
            GlobalRealestate = realestate;
            Realestate       = realestate.GetByShard(shardId);
            DAFactory        = daFactory;
            NFS = nfs;
        }
示例#2
0
        /*
         * TODO: city data service access for desired shards.
         * Need to maintain connections to shards and request from their data services...
         * Either that or online status has to at least writeback to DB.
         */

        public CityInfoController(IDAFactory daFactory, IServerNFSProvider nfs) : base("/userapi/city")
        {
            this.DAFactory = daFactory;
            this.NFS       = nfs;

            this.After.AddItemToEndOfPipeline(x =>
            {
                x.Response.WithHeader("Access-Control-Allow-Origin", "*");
            });

            this.Get["/{shardid}/{id}.png"] = parameters =>
            {
                using (var da = daFactory.Get())
                {
                    var lot = da.Lots.GetByLocation((int)parameters.shardid, (uint)parameters.id);
                    if (lot == null)
                    {
                        return(HttpStatusCode.NotFound);
                    }
                    return(Response.AsImage(Path.Combine(NFS.GetBaseDirectory(), "Lots/" + lot.lot_id.ToString("x8") + "/thumb.png")));
                }
            };

            this.Get["/{shardid}/city.json"] = parameters =>
            {
                var now = Epoch.Now;
                if (LastModelUpdate < now - 15)
                {
                    LastModelUpdate = now;
                    lock (ModelLock)
                    {
                        LastModel = new CityInfoModel();
                        using (var da = daFactory.Get())
                        {
                            var lots      = da.Lots.AllLocations((int)parameters.shardid);
                            var lotstatus = da.LotClaims.AllLocations((int)parameters.shardid);
                            LastModel.reservedLots = lots.ConvertAll(x => x.location).ToArray();
                            LastModel.names        = lots.ConvertAll(x => x.name).ToArray();
                            LastModel.activeLots   = lotstatus.ConvertAll(x => x.location).ToArray();
                            LastModel.onlineCount  = lotstatus.ConvertAll(x => x.active).ToArray();
                        }
                    }
                }
                lock (ModelLock)
                {
                    return(Response.AsJson(LastModel));
                }
            };
        }
示例#3
0
        public ServerLotProvider([Named("ShardId")] int shardId, IRealestateDomain realestate, IDAFactory daFactory, IServerNFSProvider nfs)
        {
            OnMissingLazyLoad    = true;
            OnLazyLoadCacheValue = false;

            ShardId          = shardId;
            GlobalRealestate = realestate;
            Realestate       = realestate.GetByShard(shardId);
            DAFactory        = daFactory;
            NFS = nfs;
            CityRepresentation = new City()
            {
                City_NeighborhoodsVec          = ImmutableList.Create <uint>(),
                City_OnlineLotVector           = ImmutableList.Create <bool>(),
                City_ReservedLotVector         = ImmutableList.Create <bool>(),
                City_ReservedLotInfo           = ImmutableDictionary.Create <uint, bool>(),
                City_SpotlightsVector          = ImmutableList.Create <uint>(),
                City_Top100ListIDs             = ImmutableList.Create <uint>(),
                City_TopTenNeighborhoodsVector = ImmutableList.Create <uint>()
            };
        }