public override void SendEstateUpdateInfo(UUID invoice, UUID transactionID, EstateInfo estate, UUID fromSceneID, bool sendToAgentOnly = true) { var msg = new EstateOwnerMessage { AgentID = Owner.ID, SessionID = SessionID, Invoice = invoice, TransactionID = transactionID, Method = "estateupdateinfo" }; msg.ParamList.Add(StringToBytes(estate.Name)); msg.ParamList.Add(StringToBytes((string)estate.Owner.ID)); msg.ParamList.Add(StringToBytes(estate.ID.ToString())); msg.ParamList.Add(StringToBytes(((uint)estate.Flags).ToString())); if (estate.UseGlobalTime) { msg.ParamList.Add(StringToBytes("0")); } else { msg.ParamList.Add(StringToBytes(((int)((estate.SunPosition + 6) * 1024)).ToString())); } msg.ParamList.Add(StringToBytes(estate.ParentEstateID.ToString())); msg.ParamList.Add(StringToBytes(estate.CovenantID.ToString())); msg.ParamList.Add(StringToBytes(estate.CovenantTimestamp.AsULong.ToString())); msg.ParamList.Add(StringToBytes(sendToAgentOnly?"1":"0")); msg.ParamList.Add(StringToBytes(estate.AbuseEmail)); SendMessageIfRootAgent(msg, fromSceneID); }
private EstateInfo CheckEstateRights(IAgent agent) { UGUI agentOwner = agent.Owner; uint estateID = EstateService.RegionMap[ID]; EstateInfo estateInfo = EstateService[estateID]; if (Owner.EqualsGrid(agentOwner) || IsEstateManager(agentOwner)) { /* EM, EO and RO should never be blocked by estate access rights */ return(estateInfo); } if (EstateService.EstateBans[estateID, agentOwner]) { throw new ParcelAccessDeniedException(this.GetLanguageString(agent.CurrentCulture, "YouAreBannedFromThisEstate", "You are banned from this estate.")); } if ((estateInfo.Flags & RegionOptionFlags.ExternallyVisible) == 0 && !EstateService.EstateAccess[estateID, agentOwner]) { List <UGI> estateGroups = EstateService.EstateGroup.All[estateID]; foreach (GroupMembership group in GroupsService.Memberships[agentOwner, agentOwner]) { if (estateGroups.Contains(group.Group)) { return(estateInfo); } } throw new ParcelAccessDeniedException(this.GetLanguageString(agent.CurrentCulture, "YouAreNotAllowedToEnterTheEstate", "You are not allowed to enter the estate.")); } return(estateInfo); }
/// <summary> /// 更新 /// </summary> /// <param name="estateinfo"></param> /// <returns>是否成功</returns> public string GetUpdateStr(EstateInfo estateinfo) { StringBuilder part1 = new StringBuilder(); part1.Append("update estateinfo set "); if (estateinfo.estateName != null) { part1.Append("estateName = @estateName,"); } if (estateinfo.stationNo != null) { part1.Append("stationNo = @stationNo,"); } if (estateinfo.areaNo != null) { part1.Append("areaNo = @areaNo,"); } if (estateinfo.remark != null) { part1.Append("remark = @remark,"); } if (estateinfo.shortName != null) { part1.Append("shortName = @shortName,"); } int n = part1.ToString().LastIndexOf(","); part1.Remove(n, 1); part1.Append(" where estateNo= @estateNo "); return(part1.ToString()); }
/// <summary> /// 插入 /// </summary> /// <param name="estateinfo"></param> /// <returns>是否成功</returns> public string GetInsertStr(EstateInfo estateinfo) { StringBuilder part1 = new StringBuilder(); StringBuilder part2 = new StringBuilder(); if (estateinfo.estateName != null) { part1.Append("estateName,"); part2.Append("@estateName,"); } if (estateinfo.stationNo != null) { part1.Append("stationNo,"); part2.Append("@stationNo,"); } if (estateinfo.areaNo != null) { part1.Append("areaNo,"); part2.Append("@areaNo,"); } if (estateinfo.remark != null) { part1.Append("remark,"); part2.Append("@remark,"); } if (estateinfo.shortName != null) { part1.Append("shortName,"); part2.Append("@shortName,"); } StringBuilder sql = new StringBuilder(); sql.Append("insert into estateinfo(").Append(part1.ToString().Remove(part1.Length - 1)).Append(") values (").Append(part2.ToString().Remove(part2.Length - 1)).Append(")"); return(sql.ToString()); }
/// <summary> /// 获取参数 /// </summary> /// <param name="estateinfo"></param> /// <returns></returns> public Dictionary <string, string> GetParameters(EstateInfo estateinfo) { Dictionary <string, string> dict = new Dictionary <string, string>(); if (estateinfo.estateNo != null) { dict.Add("@estateNo", estateinfo.estateNo.ToString()); } if (estateinfo.estateName != null) { dict.Add("@estateName", estateinfo.estateName.ToString()); } if (estateinfo.stationNo != null) { dict.Add("@stationNo", estateinfo.stationNo.ToString()); } if (estateinfo.areaNo != null) { dict.Add("@areaNo", estateinfo.areaNo.ToString()); } if (estateinfo.remark != null) { dict.Add("@remark", estateinfo.remark.ToString()); } if (estateinfo.shortName != null) { dict.Add("@shortName", estateinfo.shortName.ToString()); } return(dict); }
/// <summary> /// update /// </summary> /// <param name="EstateInfo"></param> /// <returns></returns> public void Update(EstateInfo model, SqlConnection connection = null, SqlTransaction transaction = null) { var str = GetUpdateStr(model); var dict = GetParameters(model); SqlHelper.Instance.ExcuteNon(str, dict, connection, transaction); }
/// <summary> /// add /// </summary> /// <param name="EstateInfo"></param> /// <returns></returns> public int Add(EstateInfo model, SqlConnection connection = null, SqlTransaction transaction = null) { var str = GetInsertStr(model) + " select @@identity"; var dict = GetParameters(model); return(Convert.ToInt32(SqlHelper.Instance.ExecuteScalar(str, dict, connection, transaction))); }
public void SendEstateInfo(IAgent agent) { EstateInfo info; lock (m_EstateDataUpdateLock) { info = new EstateInfo(m_EstateData); } agent.SendEstateUpdateInfo(UUID.Zero, UUID.Zero, info, ID, true); }
private bool CompareEstates(EstateInfo a, EstateInfo b) { List <string> mismatches = new List <string>(); if (a.Name != b.Name) { mismatches.Add("Name"); } if (a.ID != b.ID) { mismatches.Add("ID"); } if (a.AbuseEmail != b.AbuseEmail) { mismatches.Add("AbuseEmail"); } if (a.CovenantID != b.CovenantID) { mismatches.Add("CovenantID"); } if (a.CovenantTimestamp.AsULong != b.CovenantTimestamp.AsULong) { mismatches.Add("CovenantTimestamp"); } if (a.Flags != b.Flags) { mismatches.Add("Flags"); } if (a.ParentEstateID != b.ParentEstateID) { mismatches.Add("ParentEstateID"); } if (a.PricePerMeter != b.PricePerMeter) { mismatches.Add("PricePerMeter"); } if (a.SunPosition != b.SunPosition) { mismatches.Add("SunPosition"); } if (a.UseGlobalTime != b.UseGlobalTime) { mismatches.Add("UseGlobalTime"); } if (mismatches.Count > 0) { m_Log.InfoFormat("Mismatch detected: {0}", string.Join(" ", mismatches)); return(false); } else { return(true); } }
private void HandleCreate(HttpRequest req, Map jsondata) { var estateInfo = new EstateInfo(); if (!m_WebIF.TranslateToUUI(jsondata["owner"].ToString(), out estateInfo.Owner)) { m_WebIF.ErrorResponse(req, AdminWebIfErrorResult.InvalidParameter); return; } try { if (jsondata.ContainsKey("id")) { estateInfo.ID = jsondata["id"].AsUInt; } else { var estateids = m_EstateService.AllIDs; uint id = 100; while (estateids.Contains(id)) { ++id; } estateInfo.ID = id; } estateInfo.Name = jsondata["name"].ToString(); estateInfo.Flags = jsondata.ContainsKey("flags") ? (RegionOptionFlags)jsondata["flags"].AsUInt : RegionOptionFlags.AllowVoice | RegionOptionFlags.AllowSetHome | RegionOptionFlags.AllowLandmark | RegionOptionFlags.AllowDirectTeleport | RegionOptionFlags.AllowParcelChanges | RegionOptionFlags.ExternallyVisible; estateInfo.PricePerMeter = jsondata["pricepermeter"].AsInt; estateInfo.BillableFactor = jsondata["billablefactor"].AsReal; estateInfo.AbuseEmail = jsondata["abuseemail"].ToString(); estateInfo.ParentEstateID = jsondata["parentestateid"].AsUInt; } catch { m_WebIF.ErrorResponse(req, AdminWebIfErrorResult.InvalidRequest); return; } try { m_EstateService.Add(estateInfo); } catch { m_WebIF.ErrorResponse(req, AdminWebIfErrorResult.NotPossible); return; } m_WebIF.SuccessResponse(req, new Map()); }
public override bool TryGetValue(string estateName, out EstateInfo estateInfo) { foreach (var intern in m_Data.Values) { if (string.Equals(intern.Name, estateName, StringComparison.OrdinalIgnoreCase)) { estateInfo = new EstateInfo(intern); return(true); } } estateInfo = default(EstateInfo); return(false); }
public static Map ToJsonMap(this EstateInfo estate, IAdminWebIF webif) => new Map { { "ID", (int)estate.ID }, { "ParentEstateID", (int)estate.ParentEstateID }, { "Name", estate.Name }, { "Flags", ((uint)estate.Flags).ToString() }, { "Owner", webif.ResolveName(estate.Owner).ToMap() }, { "PricePerMeter", estate.PricePerMeter }, { "BillableFactor", estate.BillableFactor }, { "SunPosition", estate.SunPosition }, { "AbuseEmail", estate.AbuseEmail }, { "UseGlobalTime", estate.UseGlobalTime } };
public EstateInfo(EstateInfo src) { ID = src.ID; ParentEstateID = src.ParentEstateID; Name = src.Name; Flags = src.Flags; Owner = new UGUI(src.Owner); PricePerMeter = src.PricePerMeter; BillableFactor = src.BillableFactor; SunPosition = src.SunPosition; AbuseEmail = src.AbuseEmail; UseGlobalTime = src.UseGlobalTime; CovenantID = src.CovenantID; CovenantTimestamp = new Date(src.CovenantTimestamp); }
public override bool TryGetValue(uint estateID, out EstateInfo estateInfo) { EstateInfo intern; if (m_Data.TryGetValue(estateID, out intern)) { lock (intern) { estateInfo = new EstateInfo(intern); } return(true); } estateInfo = default(EstateInfo); return(false); }
public override bool TryGetValue(uint estateID, out EstateInfo estateInfo) { using (var conn = new MySqlConnection(m_ConnectionString)) { conn.Open(); using (var cmd = new MySqlCommand("SELECT * FROM estates WHERE ID = @id LIMIT 1", conn)) { cmd.Parameters.AddParameter("@id", estateID); using (MySqlDataReader reader = cmd.ExecuteReader()) { if (reader.Read()) { estateInfo = reader.ToEstateInfo(); return(true); } } } } estateInfo = default(EstateInfo); return(false); }
public override bool TryGetValue(string estateName, out EstateInfo estateInfo) { using (var conn = new NpgsqlConnection(m_ConnectionString)) { conn.Open(); using (var cmd = new NpgsqlCommand("SELECT * FROM estates WHERE \"Name\" = @name LIMIT 1", conn)) { cmd.Parameters.AddParameter("@name", estateName); using (NpgsqlDataReader reader = cmd.ExecuteReader()) { if (reader.Read()) { estateInfo = reader.ToEstateInfo(); return(true); } } } } estateInfo = default(EstateInfo); return(false); }
static IEnumerator AsyncFetchOpen(int limit, int offset) { var www = new WWW(string.Format(API_URL + "?status=open&limit={0}&offset={1}", limit, offset)); yield return(www); // Debug.Log(www.text); var response = JsonConvert.DeserializeObject <EstatesResponse>(www.text); for (int i = 0; i < response.data.estates.Count; i++) { var estate = response.data.estates[i]; EstateInfo estateInfo; var findInd = DclMap.EstateInfos.FindIndex(e => e.Estate.id == estate.id); if (findInd >= 0) { estateInfo = DclMap.EstateInfos[findInd]; estateInfo.Update(estate); } else { estateInfo = new EstateInfo(estate); DclMap.EstateInfos.Add(estateInfo); } var data = estate.data; var parcels = data.parcels; for (int j = 0; j < parcels.Count; j++) { var coord = parcels[j]; var index = DclMap.CoordinatesToIndex(coord.x, coord.y); DclMap.ParcelInfos[index].Update(estateInfo); } } }
public override void Add(EstateInfo estateInfo) { var dict = new Dictionary <string, object> { ["ID"] = estateInfo.ID, ["Name"] = estateInfo.Name, ["Owner"] = estateInfo.Owner, ["Flags"] = estateInfo.Flags, ["PricePerMeter"] = estateInfo.PricePerMeter, ["BillableFactor"] = estateInfo.BillableFactor, ["SunPosition"] = estateInfo.SunPosition, ["AbuseEmail"] = estateInfo.AbuseEmail, ["CovenantID"] = estateInfo.CovenantID, ["CovenantTimestamp"] = estateInfo.CovenantTimestamp, ["UseGlobalTime"] = estateInfo.UseGlobalTime, ["ParentEstateID"] = estateInfo.ParentEstateID }; using (var conn = new NpgsqlConnection(m_ConnectionString)) { conn.Open(); conn.InsertInto("estates", dict); } }
public override void Update(EstateInfo value) { var dict = new Dictionary <string, object> { ["ID"] = value.ID, ["Name"] = value.Name, ["Owner"] = value.Owner, ["Flags"] = (uint)value.Flags, ["PricePerMeter"] = value.PricePerMeter, ["BillableFactor"] = value.BillableFactor, ["SunPosition"] = value.SunPosition, ["AbuseEmail"] = value.AbuseEmail, ["CovenantID"] = value.CovenantID, ["CovenantTimestamp"] = value.CovenantTimestamp, ["UseGlobalTime"] = value.UseGlobalTime, ["ParentEstateID"] = value.ParentEstateID }; using (var conn = new NpgsqlConnection(m_ConnectionString)) { conn.Open(); conn.ReplaceInto("estates", dict, new string[] { "ID" }, m_EnableOnConflict); } }
public bool Run() { m_Log.InfoFormat("Testing Execution of {1} ({0})", m_AssetID, m_ScriptFile); IScriptAssembly scriptAssembly = null; try { using (var reader = new StreamReader(m_ScriptFile, new UTF8Encoding(false))) { scriptAssembly = CompilerRegistry.ScriptCompilers.Compile(AppDomain.CurrentDomain, UGUI.Unknown, m_AssetID, reader, includeOpen: OpenFile); } m_Log.InfoFormat("Compilation of {1} ({0}) successful", m_AssetID, m_ScriptFile); } catch (CompilerException e) { m_Log.ErrorFormat("Compilation of {1} ({0}) failed: {2}", m_AssetID, m_ScriptFile, e.Message); m_Log.WarnFormat("Stack Trace:\n{0}", e.StackTrace); return(false); } catch (Exception e) { m_Log.ErrorFormat("Compilation of {1} ({0}) failed: {2}", m_AssetID, m_ScriptFile, e.Message); m_Log.WarnFormat("Stack Trace:\n{0}", e.StackTrace); return(false); } RegionInfo rInfo; try { var estate = new EstateInfo { ParentEstateID = 1, ID = m_EstateID, Owner = m_EstateOwner, Name = m_EstateName }; m_EstateService.Add(estate); m_EstateService.RegionMap[m_RegionID] = m_EstateID; rInfo = new RegionInfo { Name = m_RegionName, ID = m_RegionID, Location = m_RegionLocation, Size = m_RegionSize, ProductName = m_ProductName, ServerPort = (uint)m_RegionPort, Owner = m_RegionOwner, Flags = RegionFlags.RegionOnline, Access = m_RegionAccess, GridURI = m_GatekeeperURI }; m_RegionStorage.RegisterRegion(rInfo); } catch (Exception e) { m_Log.Error("Registration of region failed", e); return(false); } SceneInterface scene; try { scene = m_SceneFactory.Instantiate(rInfo); } catch (Exception e) { m_Log.ErrorFormat("Running of {1} ({0}) failed: Failed to start region ID {2}: {3}: {4}\n{5}", m_AssetID, m_ScriptFile, m_RegionID, e.GetType().FullName, e.Message, e.StackTrace); return(false); } try { m_Scenes.Add(scene); scene.LoadSceneSync(); } catch (Exception e) { m_Log.Error("Starting region failed", e); return(false); } try { ExperienceServiceInterface experienceService = scene.ExperienceService; if (experienceService != null) { experienceService.Add(new ExperienceInfo { ID = m_ExperienceID, Creator = m_ScriptOwner, Owner = m_ScriptOwner, Properties = ExperiencePropertyFlags.Grid /* make this grid-wide since otherwise we have to configure a lot more */ }); } else { m_ExperienceID = UEI.Unknown; } } catch (Exception e) { m_Log.Error("Creating experience failed", e); return(false); } if (!string.IsNullOrEmpty(m_AssetSourcesConfig)) { AddAssets(scene.AssetService); } if (!string.IsNullOrEmpty(m_ScriptStatesConfig)) { AddScriptStates(); } if (!string.IsNullOrEmpty(m_LoadOarFileName)) { try { using (var s = new FileStream(m_LoadOarFileName, FileMode.Open)) { OAR.Load(m_Scenes, scene, OAR.LoadOptions.PersistUuids, s); } } catch (Exception e) { m_Log.Error("Loading oar failed", e); return(false); } } m_Runner.OtherThreadResult = false; foreach (string additionalObject in m_AdditionalObjectConfigs) { m_Log.InfoFormat("Adding object from section {0}", additionalObject); if (!TryAddAdditionalObject(scene, additionalObject)) { m_Log.Info("Failed to add object"); return(false); } } try { var grp = new ObjectGroup { RezzingObjectID = m_RezzingObjID }; var part = new ObjectPart(m_ObjectID); grp.Add(1, part.ID, part); part.ObjectGroup = grp; grp.Owner = m_ObjectOwner; grp.LastOwner = m_ObjectLastOwner; part.Creator = m_ObjectCreator; part.Name = m_ObjectName; part.Description = m_ObjectDescription; part.GlobalPosition = m_Position; part.GlobalRotation = m_Rotation; part.BaseMask = m_ObjectPermissionsBase; part.OwnerMask = m_ObjectPermissionsOwner; part.NextOwnerMask = m_ObjectPermissionsNext; part.EveryoneMask = m_ObjectPermissionsEveryone; part.GroupMask = m_ObjectPermissionsGroup; var item = new ObjectPartInventoryItem(m_ItemID) { AssetType = AssetType.LSLText, AssetID = m_AssetID, InventoryType = InventoryType.LSL, LastOwner = m_ScriptLastOwner, Creator = m_ScriptCreator, Owner = m_ScriptOwner, Name = m_ScriptName, Description = m_ScriptDescription }; item.Permissions.Base = m_ScriptPermissionsBase; item.Permissions.Current = m_ScriptPermissionsOwner; item.Permissions.EveryOne = m_ScriptPermissionsEveryone; item.Permissions.Group = m_ScriptPermissionsGroup; item.Permissions.NextOwner = m_ScriptPermissionsNext; item.ExperienceID = m_ExperienceID; scene.Add(grp); foreach (string invconfig in m_AdditionalInventoryConfigs) { AddAdditionalInventory(part, invconfig); } ChatServiceInterface chatService = scene.GetService <ChatServiceInterface>(); if (chatService != null) { chatService.AddRegionListener(PUBLIC_CHANNEL, string.Empty, UUID.Zero, "", GetUUID, null, PublicChannelLog); chatService.AddRegionListener(DEBUG_CHANNEL, string.Empty, UUID.Zero, "", GetUUID, null, DebugChannelLog); } byte[] serializedState; m_ScriptStates.TryGetValue(item.ID, out serializedState); ScriptInstance scriptInstance = scriptAssembly.Instantiate(part, item, serializedState); part.Inventory.Add(item); item.ScriptInstance = scriptInstance; item.ScriptInstance.Start(m_StartParameter); m_Log.Info("Script started"); if (Debugger.IsAttached) { m_RunTimeoutEvent.WaitOne(); } else { m_KillTimer = new Timer(KillTimerCbk, null, m_TimeoutMs + 5000, Timeout.Infinite); m_RunTimeoutEvent.WaitOne(m_TimeoutMs); } return(m_Runner.OtherThreadResult); } catch (Exception e) { m_Log.Error("Starting script failed", e); return(false); } }
public override void SendEstateUpdateInfo(UUID invoice, UUID transactionID, EstateInfo estate, UUID fromSceneID, bool sendToAgentOnly = true) { /* ignored */ }
public abstract bool TryGetValue(string estateName, out EstateInfo estateInfo);
public abstract bool TryGetValue(uint estateID, out EstateInfo estateInfo);
public abstract void Update(EstateInfo estateInfo);
public abstract void Add(EstateInfo estateInfo);
public override void Add(EstateInfo estateInfo) { m_Data.Add(estateInfo.ID, new EstateInfo(estateInfo)); }
public override void Update(EstateInfo estateInfo) { m_Data[estateInfo.ID] = new EstateInfo(estateInfo); }
public abstract void SendEstateUpdateInfo(UUID invoice, UUID transactionID, EstateInfo estate, UUID fromSceneID, bool sendToAgentOnly = true);
public bool Run() { m_Log.Info("Creating estate"); EstateInfo info = new EstateInfo() { Name = "Test Estate", ID = 101, Owner = m_EstateOwner }; m_EstateService.Add(info); m_Log.Info("Testing non-existence of Estate Accessor 1"); if (m_EstateService.EstateAccess[info.ID, m_EstateAccessor1]) { return(false); } m_Log.Info("Testing non-existence of Estate Accessor 2"); if (m_EstateService.EstateAccess[info.ID, m_EstateAccessor2]) { return(false); } m_Log.Info("Testing returned entries to match"); if (m_EstateService.EstateAccess.All[info.ID].Count != 0) { return(false); } m_Log.Info("Enabling Estate Accessor 1"); m_EstateService.EstateAccess[info.ID, m_EstateAccessor1] = true; m_Log.Info("Testing existence of Estate Accessor 1"); if (!m_EstateService.EstateAccess[info.ID, m_EstateAccessor1]) { return(false); } m_Log.Info("Testing non-existence of Estate Accessor 2"); if (m_EstateService.EstateAccess[info.ID, m_EstateAccessor2]) { return(false); } m_Log.Info("Testing returned entries to match"); if (m_EstateService.EstateAccess.All[info.ID].Count != 1) { return(false); } m_Log.Info("Enabling Estate Accessor 2"); m_EstateService.EstateAccess[info.ID, m_EstateAccessor2] = true; m_Log.Info("Testing existence of Estate Accessor 1"); if (!m_EstateService.EstateAccess[info.ID, m_EstateAccessor1]) { return(false); } m_Log.Info("Testing existence of Estate Accessor 2"); if (!m_EstateService.EstateAccess[info.ID, m_EstateAccessor2]) { return(false); } m_Log.Info("Testing returned entries to match"); if (m_EstateService.EstateAccess.All[info.ID].Count != 2) { return(false); } m_Log.Info("Disabling Estate Accessor 1"); m_EstateService.EstateAccess[info.ID, m_EstateAccessor1] = false; m_Log.Info("Testing non-existence of Estate Accessor 1"); if (m_EstateService.EstateAccess[info.ID, m_EstateAccessor1]) { return(false); } m_Log.Info("Testing existence of Estate Accessor 2"); if (!m_EstateService.EstateAccess[info.ID, m_EstateAccessor2]) { return(false); } m_Log.Info("Testing returned entries to match"); if (m_EstateService.EstateAccess.All[info.ID].Count != 1) { return(false); } m_Log.Info("Disabling Estate Accessor 2"); m_EstateService.EstateAccess[info.ID, m_EstateAccessor2] = false; m_Log.Info("Testing non-existence of Estate Accessor 1"); if (m_EstateService.EstateAccess[info.ID, m_EstateAccessor1]) { return(false); } m_Log.Info("Testing non-existence of Estate Accessor 2"); if (m_EstateService.EstateAccess[info.ID, m_EstateAccessor2]) { return(false); } m_Log.Info("Testing returned entries to match"); if (m_EstateService.EstateAccess.All[info.ID].Count != 0) { return(false); } m_Log.Info("Testing deletion"); if (!m_EstateService.Remove(info.ID)) { return(false); } return(true); }
public bool Run() { m_Log.Info("Creating estates"); EstateInfo info1 = new EstateInfo() { Name = "Test Estate 1", ID = 101, Owner = m_EstateOwner1 }; m_EstateService.Add(info1); EstateInfo info2 = new EstateInfo() { Name = "Test Estate 2", ID = 102, Owner = m_EstateOwner2 }; m_EstateService.Add(info2); m_Log.Info("Adding regions"); m_EstateService.RegionMap[m_EstateRegion1] = 101; m_EstateService.RegionMap[m_EstateRegion2] = 102; m_Log.Info("Test that estate 101 has region 1 on list"); List <UUID> infoList1 = m_EstateService.RegionMap[101]; if (infoList1.Count != 1 || !infoList1.Contains(m_EstateRegion1)) { return(false); } m_Log.Info("Test that estate 101 has region 1 on explicit"); if (m_EstateService.RegionMap[m_EstateRegion1] != 101) { return(false); } m_Log.Info("Test that estate 102 has region 2"); List <UUID> infoList2 = m_EstateService.RegionMap[102]; if (infoList2.Count != 1 || !infoList2.Contains(m_EstateRegion2)) { return(false); } m_Log.Info("Test that estate 102 has region 2 on explicit"); if (m_EstateService.RegionMap[m_EstateRegion2] != 102) { return(false); } m_Log.Info("exchange regions between estates"); m_EstateService.RegionMap[m_EstateRegion1] = 102; m_EstateService.RegionMap[m_EstateRegion2] = 101; m_Log.Info("Test that estate 101 has region 2 on list"); infoList1 = m_EstateService.RegionMap[101]; if (infoList1.Count != 1 || !infoList1.Contains(m_EstateRegion2)) { return(false); } m_Log.Info("Test that estate 101 has region 2 on explicit"); if (m_EstateService.RegionMap[m_EstateRegion2] != 101) { return(false); } m_Log.Info("Test that estate 102 has region 1"); infoList2 = m_EstateService.RegionMap[102]; if (infoList2.Count != 1 || !infoList2.Contains(m_EstateRegion1)) { return(false); } m_Log.Info("Test that estate 102 has region 1 on explicit"); if (m_EstateService.RegionMap[m_EstateRegion2] != 101) { return(false); } m_Log.Info("Testing deletion"); if (!m_EstateService.Remove(info1.ID)) { return(false); } if (!m_EstateService.Remove(info2.ID)) { return(false); } return(true); }