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); }
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); }