Пример #1
0
        public Task AddMap(UInt32 MapID, UInt32 InstanceID, UInt32 RealmID)
        {
            var key = new RealmMapKey(MapID, RealmID);

            if (!State.RealmInstaces.ContainsKey(key._key))
            {
                State.RealmInstaces.Add(key._key, new List <UInt32>());
            }
            State.RealmInstaces[key._key].Add(InstanceID);
            return(TaskDone.Done);
        }
Пример #2
0
        public async Task <IMap> GetMap(UInt32 MapID, UInt32 RealmID)
        {
            var realm = await GetRealm((int)RealmID);

            if (realm == null)
            {
                return(null);
            }

            var datastore = GrainFactory.GetGrain <IDataStoreManager>(0);
            var mapentry  = await datastore.GetMapEntry(MapID);

            if (mapentry == null)
            {
                return(null);
            }

            //This API is for world maps only
            if (mapentry.IsInstance())
            {
                return(null);
            }

            var key = new RealmMapKey(MapID, RealmID);

            IMap map = null;

            if (State.RealmInstaces.ContainsKey(key._key))
            {
                //todo: load balance? whatever do in future
                map = GrainFactory.GetGrain <IMap>((Int64)State.RealmInstaces[key._key].First());
                if (!(await map.IsValid())) //if not valid, dont use
                {
                    map = null;
                }
            }

            //if map is null, create and assign
            if (map == null)
            {
                map = await CreateMap(MapID, RealmID);
            }

            return(map);
        }