private IEnumerable <ApiWorldInstance> GetViableInstances(string forUserId, List <string> instanceIdsToIgnore = null, bool excludePublicInstances = false, bool includePublicInstancesOnly = false) { if (instanceIdsToIgnore == null) { instanceIdsToIgnore = new List <string>(); } if (worldInstances != null) { List <ApiWorldInstance> list = new List <ApiWorldInstance>(); for (int i = 0; i < worldInstances.Count; i++) { ApiWorldInstance apiWorldInstance = worldInstances[i]; int num = Mathf.Min(capacity, Mathf.Max(6, Mathf.FloorToInt((float)capacity * 0.66f))); ApiWorldInstance.AccessType accessType = apiWorldInstance.GetAccessType(); string instanceCreator = apiWorldInstance.GetInstanceCreator(); bool flag = accessType == ApiWorldInstance.AccessType.Public || accessType == ApiWorldInstance.AccessType.FriendsOfGuests; if (apiWorldInstance.count < capacity && apiWorldInstance.count < num && !instanceIdsToIgnore.Contains(apiWorldInstance.idWithTags) && !instanceIdsToIgnore.Contains(apiWorldInstance.idOnly) && accessType != ApiWorldInstance.AccessType.InviteOnly && accessType != ApiWorldInstance.AccessType.InvitePlus && (flag || !includePublicInstancesOnly) && (!excludePublicInstances || !flag) && (accessType != ApiWorldInstance.AccessType.FriendsOnly || APIUser.IsFriendsWith(instanceCreator)) && (accessType != ApiWorldInstance.AccessType.FriendsOfGuests || (instanceCreator != null && !(instanceCreator != forUserId)))) { list.Add(apiWorldInstance); } } return(from instance in list orderby instance.count descending select instance); } return(new ApiWorldInstance[0]); }
public void PutInstance(ApiWorldInstance inst, Action success, Action <string> error = null) { string idWithTags = inst.idWithTags; int num = -1; for (int i = 0; i < mWorldInstances.Count; i++) { if (mWorldInstances[i].idWithTags == idWithTags) { mWorldInstances[i] = inst; } } bool newInstance = num == -1; Dictionary <string, object> dictionary = new Dictionary <string, object>(); if (newInstance) { dictionary["id"] = inst.idWithTags; ApiWorldInstance.AccessType accessType = inst.GetAccessType(); if (accessType == ApiWorldInstance.AccessType.InviteOnly) { dictionary["private"] = inst.instanceCreator; } else { dictionary["private"] = "false"; } if (accessType == ApiWorldInstance.AccessType.FriendsOnly) { dictionary["friends"] = inst.instanceCreator; } else { dictionary["friends"] = "false"; } } dictionary["name"] = inst.instanceName; string tagString = inst.GetTagString(); if (tagString != null) { dictionary["tags"] = tagString; } ApiDictContainer apiDictContainer = new ApiDictContainer(); apiDictContainer.OnSuccess = delegate(ApiContainer c) { Dictionary <string, object> responseDictionary = (c as ApiDictContainer).ResponseDictionary; if (newInstance && responseDictionary != null) { mWorldInstances.Add(new ApiWorldInstance(this, responseDictionary, c.DataTimestamp)); } if (success != null) { success(); } }; apiDictContainer.OnError = delegate(ApiContainer c) { if (error != null) { error(c.Error); } }; ApiDictContainer responseContainer = apiDictContainer; API.SendPutRequest("worlds/" + base.id + "/" + idWithTags, responseContainer, dictionary); }