diff options
author | Teravus Ovares | 2007-11-26 05:02:18 +0000 |
---|---|---|
committer | Teravus Ovares | 2007-11-26 05:02:18 +0000 |
commit | 175b6115f19f9bad7c81fde625250b3a7f8a33f2 (patch) | |
tree | f907f3b409eca34017f6e18dcf4d644b623d0302 /OpenSim/Region/Communications | |
parent | Added Region name to the terrain texture description that gets sent to the as... (diff) | |
download | opensim-SC-175b6115f19f9bad7c81fde625250b3a7f8a33f2.zip opensim-SC-175b6115f19f9bad7c81fde625250b3a7f8a33f2.tar.gz opensim-SC-175b6115f19f9bad7c81fde625250b3a7f8a33f2.tar.bz2 opensim-SC-175b6115f19f9bad7c81fde625250b3a7f8a33f2.tar.xz |
* Restarting regions with the estate tools works in sandbox mode. I'm still working on grid mode, however. It doesn't break anything, but that feature doesn't work in grid mode yet either.
Diffstat (limited to 'OpenSim/Region/Communications')
3 files changed, 133 insertions, 2 deletions
diff --git a/OpenSim/Region/Communications/Local/LocalBackEndServices.cs b/OpenSim/Region/Communications/Local/LocalBackEndServices.cs index 4efaa23..746a19a 100644 --- a/OpenSim/Region/Communications/Local/LocalBackEndServices.cs +++ b/OpenSim/Region/Communications/Local/LocalBackEndServices.cs | |||
@@ -155,11 +155,28 @@ namespace OpenSim.Region.Communications.Local | |||
155 | return mapBlocks; | 155 | return mapBlocks; |
156 | } | 156 | } |
157 | 157 | ||
158 | /// <summary> | 158 | /// <summary> |
159 | /// </summary> | 159 | /// </summary> |
160 | /// <param name="regionHandle"></param> | 160 | /// <param name="regionHandle"></param> |
161 | /// <param name="agentData"></param> | 161 | /// <param name="agentData"></param> |
162 | /// <returns></returns> | 162 | /// <returns></returns> |
163 | /// | ||
164 | public bool RegionUp(RegionInfo region) | ||
165 | { | ||
166 | foreach (RegionCommsListener listener in m_regionListeners.Values) | ||
167 | { | ||
168 | listener.TriggerRegionUp(region); | ||
169 | } | ||
170 | |||
171 | return true; | ||
172 | } | ||
173 | |||
174 | public bool TriggerRegionUp(RegionInfo region) | ||
175 | { | ||
176 | |||
177 | return false; | ||
178 | } | ||
179 | |||
163 | public bool InformRegionOfChildAgent(ulong regionHandle, AgentCircuitData agentData) | 180 | public bool InformRegionOfChildAgent(ulong regionHandle, AgentCircuitData agentData) |
164 | //should change from agentCircuitData | 181 | //should change from agentCircuitData |
165 | { | 182 | { |
diff --git a/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs b/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs index 6b2407a..a0d6bd3 100644 --- a/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs +++ b/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs | |||
@@ -380,6 +380,7 @@ namespace OpenSim.Region.Communications.OGS1 | |||
380 | InterRegionSingleton.Instance.OnChildAgent += IncomingChildAgent; | 380 | InterRegionSingleton.Instance.OnChildAgent += IncomingChildAgent; |
381 | InterRegionSingleton.Instance.OnPrimGroupArrival += IncomingPrim; | 381 | InterRegionSingleton.Instance.OnPrimGroupArrival += IncomingPrim; |
382 | InterRegionSingleton.Instance.OnPrimGroupNear += TriggerExpectPrimCrossing; | 382 | InterRegionSingleton.Instance.OnPrimGroupNear += TriggerExpectPrimCrossing; |
383 | InterRegionSingleton.Instance.OnRegionUp += TriggerRegionUp; | ||
383 | 384 | ||
384 | } | 385 | } |
385 | 386 | ||
@@ -465,6 +466,81 @@ namespace OpenSim.Region.Communications.OGS1 | |||
465 | } | 466 | } |
466 | return true; | 467 | return true; |
467 | } | 468 | } |
469 | |||
470 | // UGLY! | ||
471 | public bool RegionUp(RegionInfo region) | ||
472 | { | ||
473 | RegionInfo regInfo = null; | ||
474 | try | ||
475 | { | ||
476 | if (m_localBackend.RegionUp(region)) | ||
477 | { | ||
478 | return true; | ||
479 | } | ||
480 | foreach (RegionInfo remoteInfo in m_remoteRegionInfoCache.Values) | ||
481 | { | ||
482 | regInfo = RequestNeighbourInfo(remoteInfo.RegionHandle); | ||
483 | if (regInfo != null) | ||
484 | { | ||
485 | //don't want to be creating a new link to the remote instance every time like we are here | ||
486 | bool retValue = false; | ||
487 | |||
488 | |||
489 | OGS1InterRegionRemoting remObject = (OGS1InterRegionRemoting)Activator.GetObject( | ||
490 | typeof(OGS1InterRegionRemoting), | ||
491 | "tcp://" + regInfo.RemotingAddress + | ||
492 | ":" + regInfo.RemotingPort + | ||
493 | "/InterRegions"); | ||
494 | |||
495 | if (remObject != null) | ||
496 | { | ||
497 | retValue = remObject.RegionUp(region); | ||
498 | } | ||
499 | else | ||
500 | { | ||
501 | Console.WriteLine("remoting object not found"); | ||
502 | } | ||
503 | remObject = null; | ||
504 | |||
505 | } | ||
506 | |||
507 | } | ||
508 | |||
509 | |||
510 | return true; | ||
511 | } | ||
512 | catch (RemotingException e) | ||
513 | { | ||
514 | MainLog.Instance.Warn("Remoting Error: Unable to connect to adjacent region: " + regInfo.RegionName + " " + regInfo.RegionLocX + "," + regInfo.RegionLocY); | ||
515 | MainLog.Instance.Debug(e.ToString()); | ||
516 | return false; | ||
517 | } | ||
518 | catch (SocketException e) | ||
519 | { | ||
520 | MainLog.Instance.Warn("Socket Error: Unable to connect to adjacent region: " + regInfo.RegionName + " " + regInfo.RegionLocX + "," + regInfo.RegionLocY); | ||
521 | MainLog.Instance.Debug(e.ToString()); | ||
522 | return false; | ||
523 | } | ||
524 | catch (InvalidCredentialException e) | ||
525 | { | ||
526 | MainLog.Instance.Warn("Invalid Credentials: Unable to connect to adjacent region: " + regInfo.RegionName + " " + regInfo.RegionLocX + "," + regInfo.RegionLocY); | ||
527 | MainLog.Instance.Debug(e.ToString()); | ||
528 | return false; | ||
529 | } | ||
530 | catch (AuthenticationException e) | ||
531 | { | ||
532 | MainLog.Instance.Warn("Authentication exception: Unable to connect to adjacent region: " + regInfo.RegionName + " " + regInfo.RegionLocX + "," + regInfo.RegionLocY); | ||
533 | MainLog.Instance.Debug(e.ToString()); | ||
534 | return false; | ||
535 | } | ||
536 | catch (Exception e) | ||
537 | { | ||
538 | MainLog.Instance.Warn("Unknown exception: Unable to connect to adjacent region: " + regInfo.RegionName + " " + regInfo.RegionLocX + "," + regInfo.RegionLocY); | ||
539 | MainLog.Instance.Debug(e.ToString()); | ||
540 | return false; | ||
541 | } | ||
542 | return true; | ||
543 | } | ||
468 | /// <summary> | 544 | /// <summary> |
469 | /// | 545 | /// |
470 | /// </summary> | 546 | /// </summary> |
@@ -680,6 +756,20 @@ namespace OpenSim.Region.Communications.OGS1 | |||
680 | } | 756 | } |
681 | } | 757 | } |
682 | 758 | ||
759 | public bool TriggerRegionUp(RegionInfo regionData) | ||
760 | { | ||
761 | try | ||
762 | { | ||
763 | return m_localBackend.TriggerRegionUp(regionData); | ||
764 | } | ||
765 | |||
766 | catch (RemotingException e) | ||
767 | { | ||
768 | MainLog.Instance.Error("Remoting Error: Unable to connect to adjacent region.\n" + e.ToString()); | ||
769 | return false; | ||
770 | } | ||
771 | } | ||
772 | |||
683 | /// <summary> | 773 | /// <summary> |
684 | /// | 774 | /// |
685 | /// </summary> | 775 | /// </summary> |
diff --git a/OpenSim/Region/Communications/OGS1/OGS1InterSimComms.cs b/OpenSim/Region/Communications/OGS1/OGS1InterSimComms.cs index 70018fd..aa6f59a 100644 --- a/OpenSim/Region/Communications/OGS1/OGS1InterSimComms.cs +++ b/OpenSim/Region/Communications/OGS1/OGS1InterSimComms.cs | |||
@@ -41,6 +41,8 @@ namespace OpenSim.Region.Communications.OGS1 | |||
41 | 41 | ||
42 | public delegate bool PrimGroupArrival(ulong regionHandle, LLUUID primID, string objData); | 42 | public delegate bool PrimGroupArrival(ulong regionHandle, LLUUID primID, string objData); |
43 | 43 | ||
44 | public delegate bool RegionUP (RegionInfo region); | ||
45 | |||
44 | public sealed class InterRegionSingleton | 46 | public sealed class InterRegionSingleton |
45 | { | 47 | { |
46 | private static readonly InterRegionSingleton instance = new InterRegionSingleton(); | 48 | private static readonly InterRegionSingleton instance = new InterRegionSingleton(); |
@@ -49,6 +51,8 @@ namespace OpenSim.Region.Communications.OGS1 | |||
49 | public event ExpectArrival OnArrival; | 51 | public event ExpectArrival OnArrival; |
50 | public event InformRegionPrimGroup OnPrimGroupNear; | 52 | public event InformRegionPrimGroup OnPrimGroupNear; |
51 | public event PrimGroupArrival OnPrimGroupArrival; | 53 | public event PrimGroupArrival OnPrimGroupArrival; |
54 | public event RegionUp OnRegionUp; | ||
55 | |||
52 | 56 | ||
53 | static InterRegionSingleton() | 57 | static InterRegionSingleton() |
54 | { | 58 | { |
@@ -72,6 +76,15 @@ namespace OpenSim.Region.Communications.OGS1 | |||
72 | return false; | 76 | return false; |
73 | } | 77 | } |
74 | 78 | ||
79 | public bool RegionUp(RegionInfo region) | ||
80 | { | ||
81 | if (OnRegionUp != null) | ||
82 | { | ||
83 | return OnRegionUp(region); | ||
84 | } | ||
85 | return false; | ||
86 | } | ||
87 | |||
75 | public bool ExpectAvatarCrossing(ulong regionHandle, LLUUID agentID, LLVector3 position, bool isFlying) | 88 | public bool ExpectAvatarCrossing(ulong regionHandle, LLUUID agentID, LLVector3 position, bool isFlying) |
76 | { | 89 | { |
77 | if (OnArrival != null) | 90 | if (OnArrival != null) |
@@ -116,7 +129,18 @@ namespace OpenSim.Region.Communications.OGS1 | |||
116 | return false; | 129 | return false; |
117 | } | 130 | } |
118 | } | 131 | } |
119 | 132 | public bool RegionUp(RegionInfo region) | |
133 | { | ||
134 | try | ||
135 | { | ||
136 | return InterRegionSingleton.Instance.RegionUp(region); | ||
137 | } | ||
138 | catch (RemotingException e) | ||
139 | { | ||
140 | Console.WriteLine("Remoting Error: Unable to connect to remote region.\n" + e.ToString()); | ||
141 | return false; | ||
142 | } | ||
143 | } | ||
120 | public bool ExpectAvatarCrossing(ulong regionHandle, LLUUID agentID, LLVector3 position, bool isFlying) | 144 | public bool ExpectAvatarCrossing(ulong regionHandle, LLUUID agentID, LLVector3 position, bool isFlying) |
121 | { | 145 | { |
122 | try | 146 | try |