aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorMelanie2013-05-07 00:31:11 +0100
committerMelanie2013-05-07 00:31:11 +0100
commit4c83b5e719ad288b1250fbed3f74698fa34eff21 (patch)
tree31eb880c4cf00b0697b07fd7f392ad374a11d1db
parentBulletSim: apply linear and angular friction in vehicle coordinates (diff)
downloadopensim-SC-4c83b5e719ad288b1250fbed3f74698fa34eff21.zip
opensim-SC-4c83b5e719ad288b1250fbed3f74698fa34eff21.tar.gz
opensim-SC-4c83b5e719ad288b1250fbed3f74698fa34eff21.tar.bz2
opensim-SC-4c83b5e719ad288b1250fbed3f74698fa34eff21.tar.xz
Step one of estate settings sharing - port the Avination Estate module (complete module) as changes are too extensive to apply manually
-rw-r--r--OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs13
-rw-r--r--OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs21
-rw-r--r--OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs57
-rw-r--r--OpenSim/Region/Framework/Interfaces/IEntityTransferModule.cs2
-rw-r--r--OpenSim/Region/Framework/Scenes/Scene.cs5
5 files changed, 71 insertions, 27 deletions
diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
index ca0cef1..eac0da7 100644
--- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
@@ -243,7 +243,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
243 243
244 protected virtual void OnNewClient(IClientAPI client) 244 protected virtual void OnNewClient(IClientAPI client)
245 { 245 {
246 client.OnTeleportHomeRequest += TeleportHome; 246 client.OnTeleportHomeRequest += TriggerTeleportHome;
247 client.OnTeleportLandmarkRequest += RequestTeleportLandmark; 247 client.OnTeleportLandmarkRequest += RequestTeleportLandmark;
248 248
249 if (!DisableInterRegionTeleportCancellation) 249 if (!DisableInterRegionTeleportCancellation)
@@ -1071,7 +1071,12 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
1071 1071
1072 #region Teleport Home 1072 #region Teleport Home
1073 1073
1074 public virtual void TeleportHome(UUID id, IClientAPI client) 1074 public virtual void TriggerTeleportHome(UUID id, IClientAPI client)
1075 {
1076 TeleportHome(id, client);
1077 }
1078
1079 public virtual bool TeleportHome(UUID id, IClientAPI client)
1075 { 1080 {
1076 m_log.DebugFormat( 1081 m_log.DebugFormat(
1077 "[ENTITY TRANSFER MODULE]: Request to teleport {0} {1} home", client.Name, client.AgentId); 1082 "[ENTITY TRANSFER MODULE]: Request to teleport {0} {1} home", client.Name, client.AgentId);
@@ -1086,7 +1091,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
1086 { 1091 {
1087 // can't find the Home region: Tell viewer and abort 1092 // can't find the Home region: Tell viewer and abort
1088 client.SendTeleportFailed("Your home region could not be found."); 1093 client.SendTeleportFailed("Your home region could not be found.");
1089 return; 1094 return false;
1090 } 1095 }
1091 1096
1092 m_log.DebugFormat("[ENTITY TRANSFER MODULE]: Home region of {0} is {1} ({2}-{3})", 1097 m_log.DebugFormat("[ENTITY TRANSFER MODULE]: Home region of {0} is {1} ({2}-{3})",
@@ -1096,6 +1101,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
1096 ((Scene)(client.Scene)).RequestTeleportLocation( 1101 ((Scene)(client.Scene)).RequestTeleportLocation(
1097 client, regionInfo.RegionHandle, uinfo.HomePosition, uinfo.HomeLookAt, 1102 client, regionInfo.RegionHandle, uinfo.HomePosition, uinfo.HomeLookAt,
1098 (uint)(Constants.TeleportFlags.SetLastToTarget | Constants.TeleportFlags.ViaHome)); 1103 (uint)(Constants.TeleportFlags.SetLastToTarget | Constants.TeleportFlags.ViaHome));
1104 return true;
1099 } 1105 }
1100 else 1106 else
1101 { 1107 {
@@ -1103,6 +1109,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
1103 "[ENTITY TRANSFER MODULE]: No grid user information found for {0} {1}. Cannot send home.", 1109 "[ENTITY TRANSFER MODULE]: No grid user information found for {0} {1}. Cannot send home.",
1104 client.Name, client.AgentId); 1110 client.Name, client.AgentId);
1105 } 1111 }
1112 return false;
1106 } 1113 }
1107 1114
1108 #endregion 1115 #endregion
diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs
index 33ea063..02ed1a0 100644
--- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs
@@ -184,7 +184,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
184 184
185 protected override void OnNewClient(IClientAPI client) 185 protected override void OnNewClient(IClientAPI client)
186 { 186 {
187 client.OnTeleportHomeRequest += TeleportHome; 187 client.OnTeleportHomeRequest += TriggerTeleportHome;
188 client.OnTeleportLandmarkRequest += RequestTeleportLandmark; 188 client.OnTeleportLandmarkRequest += RequestTeleportLandmark;
189 client.OnConnectionClosed += new Action<IClientAPI>(OnConnectionClosed); 189 client.OnConnectionClosed += new Action<IClientAPI>(OnConnectionClosed);
190 } 190 }
@@ -409,7 +409,12 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
409 // return base.UpdateAgent(reg, finalDestination, agentData, sp); 409 // return base.UpdateAgent(reg, finalDestination, agentData, sp);
410 //} 410 //}
411 411
412 public override void TeleportHome(UUID id, IClientAPI client) 412 public virtual void TriggerTeleportHome(UUID id, IClientAPI client)
413 {
414 TeleportHome(id, client);
415 }
416
417 public override bool TeleportHome(UUID id, IClientAPI client)
413 { 418 {
414 m_log.DebugFormat( 419 m_log.DebugFormat(
415 "[ENTITY TRANSFER MODULE]: Request to teleport {0} {1} home", client.Name, client.AgentId); 420 "[ENTITY TRANSFER MODULE]: Request to teleport {0} {1} home", client.Name, client.AgentId);
@@ -420,8 +425,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
420 { 425 {
421 // local grid user 426 // local grid user
422 m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: User is local"); 427 m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: User is local");
423 base.TeleportHome(id, client); 428 return base.TeleportHome(id, client);
424 return;
425 } 429 }
426 430
427 // Foreign user wants to go home 431 // Foreign user wants to go home
@@ -431,7 +435,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
431 { 435 {
432 client.SendTeleportFailed("Your information has been lost"); 436 client.SendTeleportFailed("Your information has been lost");
433 m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: Unable to locate agent's gateway information"); 437 m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: Unable to locate agent's gateway information");
434 return; 438 return false;
435 } 439 }
436 440
437 IUserAgentService userAgentService = new UserAgentServiceConnector(aCircuit.ServiceURLs["HomeURI"].ToString()); 441 IUserAgentService userAgentService = new UserAgentServiceConnector(aCircuit.ServiceURLs["HomeURI"].ToString());
@@ -441,7 +445,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
441 { 445 {
442 client.SendTeleportFailed("Your home region could not be found"); 446 client.SendTeleportFailed("Your home region could not be found");
443 m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: Agent's home region not found"); 447 m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: Agent's home region not found");
444 return; 448 return false;
445 } 449 }
446 450
447 ScenePresence sp = ((Scene)(client.Scene)).GetScenePresence(client.AgentId); 451 ScenePresence sp = ((Scene)(client.Scene)).GetScenePresence(client.AgentId);
@@ -449,7 +453,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
449 { 453 {
450 client.SendTeleportFailed("Internal error"); 454 client.SendTeleportFailed("Internal error");
451 m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: Agent not found in the scene where it is supposed to be"); 455 m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: Agent not found in the scene where it is supposed to be");
452 return; 456 return false;
453 } 457 }
454 458
455 GridRegion homeGatekeeper = MakeRegion(aCircuit); 459 GridRegion homeGatekeeper = MakeRegion(aCircuit);
@@ -460,6 +464,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
460 DoTeleport( 464 DoTeleport(
461 sp, homeGatekeeper, finalDestination, 465 sp, homeGatekeeper, finalDestination,
462 position, lookAt, (uint)(Constants.TeleportFlags.SetLastToTarget | Constants.TeleportFlags.ViaHome)); 466 position, lookAt, (uint)(Constants.TeleportFlags.SetLastToTarget | Constants.TeleportFlags.ViaHome));
467 return true;
463 } 468 }
464 469
465 /// <summary> 470 /// <summary>
@@ -586,4 +591,4 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
586 return region; 591 return region;
587 } 592 }
588 } 593 }
589} \ No newline at end of file 594}
diff --git a/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs b/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs
index 60f6739..91f6501 100644
--- a/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs
+++ b/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs
@@ -32,6 +32,7 @@ using System.IO;
32using System.Linq; 32using System.Linq;
33using System.Reflection; 33using System.Reflection;
34using System.Security; 34using System.Security;
35using System.Timers;
35using log4net; 36using log4net;
36using Mono.Addins; 37using Mono.Addins;
37using Nini.Config; 38using Nini.Config;
@@ -48,6 +49,7 @@ namespace OpenSim.Region.CoreModules.World.Estate
48 { 49 {
49 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 50 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
50 51
52 private Timer m_regionChangeTimer = new Timer();
51 public Scene Scene { get; private set; } 53 public Scene Scene { get; private set; }
52 public IUserManagement UserManager { get; private set; } 54 public IUserManagement UserManager { get; private set; }
53 55
@@ -65,6 +67,8 @@ namespace OpenSim.Region.CoreModules.World.Estate
65 public event ChangeDelegate OnEstateInfoChange; 67 public event ChangeDelegate OnEstateInfoChange;
66 public event MessageDelegate OnEstateMessage; 68 public event MessageDelegate OnEstateMessage;
67 69
70 private int m_delayCount = 0;
71
68 #region Region Module interface 72 #region Region Module interface
69 73
70 public string Name { get { return "EstateManagementModule"; } } 74 public string Name { get { return "EstateManagementModule"; } }
@@ -114,6 +118,12 @@ namespace OpenSim.Region.CoreModules.World.Estate
114 118
115 #region Packet Data Responders 119 #region Packet Data Responders
116 120
121 private void clientSendDetailedEstateData(IClientAPI remote_client, UUID invoice)
122 {
123 sendDetailedEstateData(remote_client, invoice);
124 sendEstateLists(remote_client, invoice);
125 }
126
117 private void sendDetailedEstateData(IClientAPI remote_client, UUID invoice) 127 private void sendDetailedEstateData(IClientAPI remote_client, UUID invoice)
118 { 128 {
119 uint sun = 0; 129 uint sun = 0;
@@ -136,7 +146,10 @@ namespace OpenSim.Region.CoreModules.World.Estate
136 (uint) Scene.RegionInfo.RegionSettings.CovenantChangedDateTime, 146 (uint) Scene.RegionInfo.RegionSettings.CovenantChangedDateTime,
137 Scene.RegionInfo.EstateSettings.AbuseEmail, 147 Scene.RegionInfo.EstateSettings.AbuseEmail,
138 estateOwner); 148 estateOwner);
149 }
139 150
151 private void sendEstateLists(IClientAPI remote_client, UUID invoice)
152 {
140 remote_client.SendEstateList(invoice, 153 remote_client.SendEstateList(invoice,
141 (int)Constants.EstateAccessCodex.EstateManagers, 154 (int)Constants.EstateAccessCodex.EstateManagers,
142 Scene.RegionInfo.EstateSettings.EstateManagers, 155 Scene.RegionInfo.EstateSettings.EstateManagers,
@@ -330,7 +343,7 @@ namespace OpenSim.Region.CoreModules.World.Estate
330 timeInSeconds -= 15; 343 timeInSeconds -= 15;
331 } 344 }
332 345
333 restartModule.ScheduleRestart(UUID.Zero, "Region will restart in {0}", times.ToArray(), true); 346 restartModule.ScheduleRestart(UUID.Zero, "Region will restart in {0}", times.ToArray(), false);
334 347
335 m_log.InfoFormat( 348 m_log.InfoFormat(
336 "User {0} requested restart of region {1} in {2} seconds", 349 "User {0} requested restart of region {1} in {2} seconds",
@@ -546,7 +559,11 @@ namespace OpenSim.Region.CoreModules.World.Estate
546 { 559 {
547 if (!s.IsChildAgent) 560 if (!s.IsChildAgent)
548 { 561 {
549 Scene.TeleportClientHome(user, s.ControllingClient); 562 if (!Scene.TeleportClientHome(user, s.ControllingClient))
563 {
564 s.ControllingClient.Kick("Your access to the region was revoked and TP home failed - you have been logged out.");
565 s.ControllingClient.Close();
566 }
550 } 567 }
551 } 568 }
552 569
@@ -555,7 +572,7 @@ namespace OpenSim.Region.CoreModules.World.Estate
555 { 572 {
556 remote_client.SendAlertMessage("User is already on the region ban list"); 573 remote_client.SendAlertMessage("User is already on the region ban list");
557 } 574 }
558 //m_scene.RegionInfo.regionBanlist.Add(Manager(user); 575 //Scene.RegionInfo.regionBanlist.Add(Manager(user);
559 remote_client.SendBannedUserList(invoice, Scene.RegionInfo.EstateSettings.EstateBans, Scene.RegionInfo.EstateSettings.EstateID); 576 remote_client.SendBannedUserList(invoice, Scene.RegionInfo.EstateSettings.EstateBans, Scene.RegionInfo.EstateSettings.EstateID);
560 } 577 }
561 else 578 else
@@ -611,7 +628,7 @@ namespace OpenSim.Region.CoreModules.World.Estate
611 remote_client.SendAlertMessage("User is not on the region ban list"); 628 remote_client.SendAlertMessage("User is not on the region ban list");
612 } 629 }
613 630
614 //m_scene.RegionInfo.regionBanlist.Add(Manager(user); 631 //Scene.RegionInfo.regionBanlist.Add(Manager(user);
615 remote_client.SendBannedUserList(invoice, Scene.RegionInfo.EstateSettings.EstateBans, Scene.RegionInfo.EstateSettings.EstateID); 632 remote_client.SendBannedUserList(invoice, Scene.RegionInfo.EstateSettings.EstateBans, Scene.RegionInfo.EstateSettings.EstateID);
616 } 633 }
617 else 634 else
@@ -777,7 +794,11 @@ namespace OpenSim.Region.CoreModules.World.Estate
777 ScenePresence s = Scene.GetScenePresence(prey); 794 ScenePresence s = Scene.GetScenePresence(prey);
778 if (s != null) 795 if (s != null)
779 { 796 {
780 Scene.TeleportClientHome(prey, s.ControllingClient); 797 if (!Scene.TeleportClientHome(prey, s.ControllingClient))
798 {
799 s.ControllingClient.Kick("You were teleported home by the region owner, but the TP failed - you have been logged out.");
800 s.ControllingClient.Close();
801 }
781 } 802 }
782 } 803 }
783 } 804 }
@@ -795,7 +816,13 @@ namespace OpenSim.Region.CoreModules.World.Estate
795 // Also make sure they are actually in the region 816 // Also make sure they are actually in the region
796 ScenePresence p; 817 ScenePresence p;
797 if(Scene.TryGetScenePresence(client.AgentId, out p)) 818 if(Scene.TryGetScenePresence(client.AgentId, out p))
798 Scene.TeleportClientHome(p.UUID, p.ControllingClient); 819 {
820 if (!Scene.TeleportClientHome(p.UUID, p.ControllingClient))
821 {
822 p.ControllingClient.Kick("You were teleported home by the region owner, but the TP failed - you have been logged out.");
823 p.ControllingClient.Close();
824 }
825 }
799 } 826 }
800 }); 827 });
801 } 828 }
@@ -1170,7 +1197,7 @@ namespace OpenSim.Region.CoreModules.World.Estate
1170 1197
1171 private void EventManager_OnNewClient(IClientAPI client) 1198 private void EventManager_OnNewClient(IClientAPI client)
1172 { 1199 {
1173 client.OnDetailedEstateDataRequest += sendDetailedEstateData; 1200 client.OnDetailedEstateDataRequest += clientSendDetailedEstateData;
1174 client.OnSetEstateFlagsRequest += estateSetRegionInfoHandler; 1201 client.OnSetEstateFlagsRequest += estateSetRegionInfoHandler;
1175// client.OnSetEstateTerrainBaseTexture += setEstateTerrainBaseTexture; 1202// client.OnSetEstateTerrainBaseTexture += setEstateTerrainBaseTexture;
1176 client.OnSetEstateTerrainDetailTexture += setEstateTerrainBaseTexture; 1203 client.OnSetEstateTerrainDetailTexture += setEstateTerrainBaseTexture;
@@ -1218,8 +1245,6 @@ namespace OpenSim.Region.CoreModules.World.Estate
1218 flags |= RegionFlags.NoFly; 1245 flags |= RegionFlags.NoFly;
1219 if (Scene.RegionInfo.RegionSettings.RestrictPushing) 1246 if (Scene.RegionInfo.RegionSettings.RestrictPushing)
1220 flags |= RegionFlags.RestrictPushObject; 1247 flags |= RegionFlags.RestrictPushObject;
1221 if (Scene.RegionInfo.RegionSettings.AllowLandJoinDivide)
1222 flags |= RegionFlags.AllowParcelChanges;
1223 if (Scene.RegionInfo.RegionSettings.BlockShowInSearch) 1248 if (Scene.RegionInfo.RegionSettings.BlockShowInSearch)
1224 flags |= RegionFlags.BlockParcelSearch; 1249 flags |= RegionFlags.BlockParcelSearch;
1225 1250
@@ -1229,11 +1254,11 @@ namespace OpenSim.Region.CoreModules.World.Estate
1229 flags |= RegionFlags.Sandbox; 1254 flags |= RegionFlags.Sandbox;
1230 if (Scene.RegionInfo.EstateSettings.AllowVoice) 1255 if (Scene.RegionInfo.EstateSettings.AllowVoice)
1231 flags |= RegionFlags.AllowVoice; 1256 flags |= RegionFlags.AllowVoice;
1257 if (Scene.RegionInfo.EstateSettings.BlockDwell)
1258 flags |= RegionFlags.BlockDwell;
1259 if (Scene.RegionInfo.EstateSettings.ResetHomeOnTeleport)
1260 flags |= RegionFlags.ResetHomeOnTeleport;
1232 1261
1233 // Fudge these to always on, so the menu options activate
1234 //
1235 flags |= RegionFlags.AllowLandmark;
1236 flags |= RegionFlags.AllowSetHome;
1237 1262
1238 // TODO: SkipUpdateInterestList 1263 // TODO: SkipUpdateInterestList
1239 1264
@@ -1294,6 +1319,12 @@ namespace OpenSim.Region.CoreModules.World.Estate
1294 1319
1295 public void TriggerRegionInfoChange() 1320 public void TriggerRegionInfoChange()
1296 { 1321 {
1322 m_regionChangeTimer.Stop();
1323 m_regionChangeTimer.Start();
1324 }
1325
1326 protected void RaiseRegionInfoChange(object sender, ElapsedEventArgs e)
1327 {
1297 ChangeDelegate change = OnRegionInfoChange; 1328 ChangeDelegate change = OnRegionInfoChange;
1298 1329
1299 if (change != null) 1330 if (change != null)
diff --git a/OpenSim/Region/Framework/Interfaces/IEntityTransferModule.cs b/OpenSim/Region/Framework/Interfaces/IEntityTransferModule.cs
index 69be83e..1c43a25 100644
--- a/OpenSim/Region/Framework/Interfaces/IEntityTransferModule.cs
+++ b/OpenSim/Region/Framework/Interfaces/IEntityTransferModule.cs
@@ -72,7 +72,7 @@ namespace OpenSim.Region.Framework.Interfaces
72 /// </summary> 72 /// </summary>
73 /// <param name='id'></param> 73 /// <param name='id'></param>
74 /// <param name='client'></param> 74 /// <param name='client'></param>
75 void TeleportHome(UUID id, IClientAPI client); 75 bool TeleportHome(UUID id, IClientAPI client);
76 76
77 /// <summary> 77 /// <summary>
78 /// Show whether the given agent is being teleported. 78 /// Show whether the given agent is being teleported.
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index 8fe2d72..2aba2dd 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -3230,17 +3230,18 @@ namespace OpenSim.Region.Framework.Scenes
3230 /// </summary> 3230 /// </summary>
3231 /// <param name="agentId">The avatar's Unique ID</param> 3231 /// <param name="agentId">The avatar's Unique ID</param>
3232 /// <param name="client">The IClientAPI for the client</param> 3232 /// <param name="client">The IClientAPI for the client</param>
3233 public virtual void TeleportClientHome(UUID agentId, IClientAPI client) 3233 public virtual bool TeleportClientHome(UUID agentId, IClientAPI client)
3234 { 3234 {
3235 if (EntityTransferModule != null) 3235 if (EntityTransferModule != null)
3236 { 3236 {
3237 EntityTransferModule.TeleportHome(agentId, client); 3237 return EntityTransferModule.TeleportHome(agentId, client);
3238 } 3238 }
3239 else 3239 else
3240 { 3240 {
3241 m_log.DebugFormat("[SCENE]: Unable to teleport user home: no AgentTransferModule is active"); 3241 m_log.DebugFormat("[SCENE]: Unable to teleport user home: no AgentTransferModule is active");
3242 client.SendTeleportFailed("Unable to perform teleports on this simulator."); 3242 client.SendTeleportFailed("Unable to perform teleports on this simulator.");
3243 } 3243 }
3244 return false;
3244 } 3245 }
3245 3246
3246 /// <summary> 3247 /// <summary>