diff options
author | Teravus Ovares | 2007-12-09 05:59:49 +0000 |
---|---|---|
committer | Teravus Ovares | 2007-12-09 05:59:49 +0000 |
commit | f2b175ef08066649a13b6a42f0a59d9bee503638 (patch) | |
tree | 084ef2d6e2c67358b85d62179aee98eaa838d25c | |
parent | added more packet handling stubs (diff) | |
download | opensim-SC-f2b175ef08066649a13b6a42f0a59d9bee503638.zip opensim-SC-f2b175ef08066649a13b6a42f0a59d9bee503638.tar.gz opensim-SC-f2b175ef08066649a13b6a42f0a59d9bee503638.tar.bz2 opensim-SC-f2b175ef08066649a13b6a42f0a59d9bee503638.tar.xz |
* Added some inter-region comms glue for allowing sims to chat amongst themsevles about an agent behind the agent's back.
* Will be using this glue Tomorrow/today to tell other regions what the agent's draw distance is and what region they're actually in so the region can make decisions on what prim to send, if any.
-rw-r--r-- | OpenSim/Framework/ChildAgentDataUpdate.cs | 23 | ||||
-rw-r--r-- | OpenSim/Framework/Communications/IInterRegionCommunications.cs | 1 | ||||
-rw-r--r-- | OpenSim/Framework/IRegionCommsListener.cs | 3 | ||||
-rw-r--r-- | OpenSim/Framework/RegionCommsListener.cs | 11 | ||||
-rw-r--r-- | OpenSim/Region/Communications/Local/LocalBackEndServices.cs | 22 | ||||
-rw-r--r-- | OpenSim/Region/Communications/OGS1/OGS1GridServices.cs | 86 | ||||
-rw-r--r-- | OpenSim/Region/Communications/OGS1/OGS1InterSimComms.cs | 26 |
7 files changed, 172 insertions, 0 deletions
diff --git a/OpenSim/Framework/ChildAgentDataUpdate.cs b/OpenSim/Framework/ChildAgentDataUpdate.cs new file mode 100644 index 0000000..c48f53a --- /dev/null +++ b/OpenSim/Framework/ChildAgentDataUpdate.cs | |||
@@ -0,0 +1,23 @@ | |||
1 | using System; | ||
2 | using System.Collections.Generic; | ||
3 | using System.Text; | ||
4 | |||
5 | namespace OpenSim.Framework | ||
6 | { | ||
7 | [Serializable] | ||
8 | public class ChildAgentDataUpdate | ||
9 | { | ||
10 | public ChildAgentDataUpdate() | ||
11 | { | ||
12 | |||
13 | } | ||
14 | public sLLVector3 Position; | ||
15 | public ulong regionHandle; | ||
16 | public float drawdistance; | ||
17 | public sLLVector3 cameraPosition; | ||
18 | public sLLVector3 Velocity; | ||
19 | public float AVHeight; | ||
20 | public Guid AgentID; | ||
21 | public float godlevel; | ||
22 | } | ||
23 | } | ||
diff --git a/OpenSim/Framework/Communications/IInterRegionCommunications.cs b/OpenSim/Framework/Communications/IInterRegionCommunications.cs index e025223..e20c627 100644 --- a/OpenSim/Framework/Communications/IInterRegionCommunications.cs +++ b/OpenSim/Framework/Communications/IInterRegionCommunications.cs | |||
@@ -36,6 +36,7 @@ namespace OpenSim.Framework.Communications | |||
36 | bool InformRegionOfChildAgent(ulong regionHandle, AgentCircuitData agentData); | 36 | bool InformRegionOfChildAgent(ulong regionHandle, AgentCircuitData agentData); |
37 | bool InformRegionOfPrimCrossing(ulong regionHandle, LLUUID primID, string objData); | 37 | bool InformRegionOfPrimCrossing(ulong regionHandle, LLUUID primID, string objData); |
38 | bool RegionUp(SearializableRegionInfo region, ulong regionhandle); | 38 | bool RegionUp(SearializableRegionInfo region, ulong regionhandle); |
39 | bool ChildAgentUpdate(ulong regionHandle, ChildAgentDataUpdate cAgentData); | ||
39 | 40 | ||
40 | bool ExpectAvatarCrossing(ulong regionHandle, LLUUID agentID, LLVector3 position, bool isFlying); | 41 | bool ExpectAvatarCrossing(ulong regionHandle, LLUUID agentID, LLVector3 position, bool isFlying); |
41 | bool ExpectPrimCrossing(ulong regionHandle, LLUUID primID, LLVector3 position, bool isFlying); | 42 | bool ExpectPrimCrossing(ulong regionHandle, LLUUID primID, LLVector3 position, bool isFlying); |
diff --git a/OpenSim/Framework/IRegionCommsListener.cs b/OpenSim/Framework/IRegionCommsListener.cs index 53d0059..5f20362 100644 --- a/OpenSim/Framework/IRegionCommsListener.cs +++ b/OpenSim/Framework/IRegionCommsListener.cs | |||
@@ -48,6 +48,8 @@ namespace OpenSim.Framework | |||
48 | 48 | ||
49 | public delegate bool RegionUp(RegionInfo region); | 49 | public delegate bool RegionUp(RegionInfo region); |
50 | 50 | ||
51 | public delegate bool ChildAgentUpdate(ulong regionHandle, ChildAgentDataUpdate cAgentData); | ||
52 | |||
51 | 53 | ||
52 | 54 | ||
53 | public interface IRegionCommsListener | 55 | public interface IRegionCommsListener |
@@ -62,6 +64,7 @@ namespace OpenSim.Framework | |||
62 | event UpdateNeighbours OnNeighboursUpdate; | 64 | event UpdateNeighbours OnNeighboursUpdate; |
63 | event CloseAgentConnection OnCloseAgentConnection; | 65 | event CloseAgentConnection OnCloseAgentConnection; |
64 | event RegionUp OnRegionUp; | 66 | event RegionUp OnRegionUp; |
67 | event ChildAgentUpdate OnChildAgentUpdate; | ||
65 | 68 | ||
66 | } | 69 | } |
67 | } \ No newline at end of file | 70 | } \ No newline at end of file |
diff --git a/OpenSim/Framework/RegionCommsListener.cs b/OpenSim/Framework/RegionCommsListener.cs index d209ff4..62c477b 100644 --- a/OpenSim/Framework/RegionCommsListener.cs +++ b/OpenSim/Framework/RegionCommsListener.cs | |||
@@ -43,6 +43,7 @@ namespace OpenSim.Framework | |||
43 | public event AcknowledgePrimCross OnAcknowledgePrimCrossed; | 43 | public event AcknowledgePrimCross OnAcknowledgePrimCrossed; |
44 | public event CloseAgentConnection OnCloseAgentConnection; | 44 | public event CloseAgentConnection OnCloseAgentConnection; |
45 | public event RegionUp OnRegionUp; | 45 | public event RegionUp OnRegionUp; |
46 | public event ChildAgentUpdate OnChildAgentUpdate; | ||
46 | public string debugRegionName=""; | 47 | public string debugRegionName=""; |
47 | 48 | ||
48 | 49 | ||
@@ -81,6 +82,16 @@ namespace OpenSim.Framework | |||
81 | return false; | 82 | return false; |
82 | } | 83 | } |
83 | 84 | ||
85 | public virtual bool TriggerChildAgentUpdate(ulong regionHandle, ChildAgentDataUpdate cAgentData) | ||
86 | { | ||
87 | if (OnChildAgentUpdate != null) | ||
88 | { | ||
89 | OnChildAgentUpdate(regionHandle, cAgentData); | ||
90 | return true; | ||
91 | } | ||
92 | return false; | ||
93 | } | ||
94 | |||
84 | public virtual bool TriggerExpectAvatarCrossing(ulong regionHandle, LLUUID agentID, LLVector3 position, | 95 | public virtual bool TriggerExpectAvatarCrossing(ulong regionHandle, LLUUID agentID, LLVector3 position, |
85 | bool isFlying) | 96 | bool isFlying) |
86 | { | 97 | { |
diff --git a/OpenSim/Region/Communications/Local/LocalBackEndServices.cs b/OpenSim/Region/Communications/Local/LocalBackEndServices.cs index 9d390e4..1bf9801 100644 --- a/OpenSim/Region/Communications/Local/LocalBackEndServices.cs +++ b/OpenSim/Region/Communications/Local/LocalBackEndServices.cs | |||
@@ -205,6 +205,19 @@ namespace OpenSim.Region.Communications.Local | |||
205 | return false; | 205 | return false; |
206 | } | 206 | } |
207 | 207 | ||
208 | public virtual bool ChildAgentUpdate(ulong regionHandle, ChildAgentDataUpdate cAgentData) | ||
209 | { | ||
210 | if (m_regionListeners.ContainsKey(regionHandle)) | ||
211 | { | ||
212 | // Console.WriteLine("CommsManager- Informing a region to expect child agent"); | ||
213 | m_regionListeners[regionHandle].TriggerChildAgentUpdate(regionHandle, cAgentData); | ||
214 | //MainLog.Instance.Verbose("INTER", rdebugRegionName + ":Local BackEnd: Got Listener trigginering local event: " + agentData.firstname + " " + agentData.lastname); | ||
215 | |||
216 | return true; | ||
217 | } | ||
218 | return false; | ||
219 | } | ||
220 | |||
208 | public bool TriggerRegionUp(RegionInfo region, ulong regionhandle) | 221 | public bool TriggerRegionUp(RegionInfo region, ulong regionhandle) |
209 | { | 222 | { |
210 | if (m_regionListeners.ContainsKey(regionhandle)) | 223 | if (m_regionListeners.ContainsKey(regionhandle)) |
@@ -215,6 +228,15 @@ namespace OpenSim.Region.Communications.Local | |||
215 | return false; | 228 | return false; |
216 | } | 229 | } |
217 | 230 | ||
231 | public bool TriggerChildAgentUpdate(ulong regionHandle, ChildAgentDataUpdate cAgentData) | ||
232 | { | ||
233 | if (m_regionListeners.ContainsKey(regionHandle)) | ||
234 | { | ||
235 | return m_regionListeners[regionHandle].TriggerChildAgentUpdate(regionHandle,cAgentData); | ||
236 | } | ||
237 | return false; | ||
238 | } | ||
239 | |||
218 | /// <summary> | 240 | /// <summary> |
219 | /// </summary> | 241 | /// </summary> |
220 | /// <param name="regionHandle"></param> | 242 | /// <param name="regionHandle"></param> |
diff --git a/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs b/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs index 978111f..c556188 100644 --- a/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs +++ b/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs | |||
@@ -462,12 +462,83 @@ namespace OpenSim.Region.Communications.OGS1 | |||
462 | InterRegionSingleton.Instance.OnPrimGroupArrival += IncomingPrim; | 462 | InterRegionSingleton.Instance.OnPrimGroupArrival += IncomingPrim; |
463 | InterRegionSingleton.Instance.OnPrimGroupNear += TriggerExpectPrimCrossing; | 463 | InterRegionSingleton.Instance.OnPrimGroupNear += TriggerExpectPrimCrossing; |
464 | InterRegionSingleton.Instance.OnRegionUp += TriggerRegionUp; | 464 | InterRegionSingleton.Instance.OnRegionUp += TriggerRegionUp; |
465 | InterRegionSingleton.Instance.OnChildAgentUpdate += TriggerChildAgentUpdate; | ||
465 | //InterRegionSingleton.Instance.OnRegionUp += RegionUp; | 466 | //InterRegionSingleton.Instance.OnRegionUp += RegionUp; |
466 | } | 467 | } |
467 | 468 | ||
468 | #region Methods called by regions in this instance | 469 | #region Methods called by regions in this instance |
469 | 470 | ||
471 | public bool ChildAgentUpdate(ulong regionHandle, ChildAgentDataUpdate cAgentData) | ||
472 | { | ||
473 | RegionInfo regInfo = null; | ||
474 | try | ||
475 | { | ||
476 | if (m_localBackend.ChildAgentUpdate(regionHandle, cAgentData)) | ||
477 | { | ||
478 | return true; | ||
479 | } | ||
480 | |||
481 | regInfo = RequestNeighbourInfo(regionHandle); | ||
482 | if (regInfo != null) | ||
483 | { | ||
484 | //don't want to be creating a new link to the remote instance every time like we are here | ||
485 | bool retValue = false; | ||
486 | |||
487 | |||
488 | OGS1InterRegionRemoting remObject = (OGS1InterRegionRemoting)Activator.GetObject( | ||
489 | typeof(OGS1InterRegionRemoting), | ||
490 | "tcp://" + regInfo.RemotingAddress + | ||
491 | ":" + regInfo.RemotingPort + | ||
492 | "/InterRegions"); | ||
493 | |||
494 | if (remObject != null) | ||
495 | { | ||
496 | retValue = remObject.ChildAgentUpdate(regionHandle, cAgentData); | ||
497 | } | ||
498 | else | ||
499 | { | ||
500 | Console.WriteLine("remoting object not found"); | ||
501 | } | ||
502 | remObject = null; | ||
503 | MainLog.Instance.Verbose("INTER", gdebugRegionName + ": OGS1 tried to Update Child Agent data on outside region and got " + retValue.ToString()); | ||
504 | |||
505 | return retValue; | ||
506 | } | ||
507 | |||
508 | return false; | ||
509 | } | ||
510 | catch (RemotingException e) | ||
511 | { | ||
512 | MainLog.Instance.Warn("Remoting Error: Unable to connect to adjacent region: " + regInfo.RegionName + " " + regInfo.RegionLocX + "," + regInfo.RegionLocY); | ||
513 | MainLog.Instance.Debug(e.ToString()); | ||
514 | return false; | ||
515 | } | ||
516 | catch (SocketException e) | ||
517 | { | ||
518 | MainLog.Instance.Warn("Socket Error: Unable to connect to adjacent region: " + regInfo.RegionName + " " + regInfo.RegionLocX + "," + regInfo.RegionLocY); | ||
519 | MainLog.Instance.Debug(e.ToString()); | ||
520 | return false; | ||
521 | } | ||
522 | catch (InvalidCredentialException e) | ||
523 | { | ||
524 | MainLog.Instance.Warn("Invalid Credentials: Unable to connect to adjacent region: " + regInfo.RegionName + " " + regInfo.RegionLocX + "," + regInfo.RegionLocY); | ||
525 | MainLog.Instance.Debug(e.ToString()); | ||
526 | return false; | ||
527 | } | ||
528 | catch (AuthenticationException e) | ||
529 | { | ||
530 | MainLog.Instance.Warn("Authentication exception: Unable to connect to adjacent region: " + regInfo.RegionName + " " + regInfo.RegionLocX + "," + regInfo.RegionLocY); | ||
531 | MainLog.Instance.Debug(e.ToString()); | ||
532 | return false; | ||
533 | } | ||
534 | catch (Exception e) | ||
535 | { | ||
536 | MainLog.Instance.Warn("Unknown exception: Unable to connect to adjacent region: " + regInfo.RegionName + " " + regInfo.RegionLocX + "," + regInfo.RegionLocY); | ||
537 | MainLog.Instance.Debug(e.ToString()); | ||
538 | return false; | ||
539 | } | ||
470 | 540 | ||
541 | } | ||
471 | 542 | ||
472 | /// <summary> | 543 | /// <summary> |
473 | /// | 544 | /// |
@@ -877,6 +948,21 @@ namespace OpenSim.Region.Communications.OGS1 | |||
877 | return false; | 948 | return false; |
878 | } | 949 | } |
879 | } | 950 | } |
951 | public bool TriggerChildAgentUpdate(ulong regionHandle, ChildAgentDataUpdate cAgentData) | ||
952 | { | ||
953 | MainLog.Instance.Verbose("INTER", "Incoming OGS1 Child Agent Data Update"); | ||
954 | |||
955 | try | ||
956 | { | ||
957 | return m_localBackend.TriggerChildAgentUpdate(regionHandle, cAgentData); | ||
958 | } | ||
959 | catch (RemotingException e) | ||
960 | { | ||
961 | MainLog.Instance.Error("Remoting Error: Unable to connect to adjacent region.\n" + e.ToString()); | ||
962 | return false; | ||
963 | } | ||
964 | |||
965 | } | ||
880 | 966 | ||
881 | /// <summary> | 967 | /// <summary> |
882 | /// | 968 | /// |
diff --git a/OpenSim/Region/Communications/OGS1/OGS1InterSimComms.cs b/OpenSim/Region/Communications/OGS1/OGS1InterSimComms.cs index a7636da..683c471 100644 --- a/OpenSim/Region/Communications/OGS1/OGS1InterSimComms.cs +++ b/OpenSim/Region/Communications/OGS1/OGS1InterSimComms.cs | |||
@@ -43,6 +43,8 @@ namespace OpenSim.Region.Communications.OGS1 | |||
43 | 43 | ||
44 | public delegate bool RegionUp (SearializableRegionInfo region, ulong regionhandle); | 44 | public delegate bool RegionUp (SearializableRegionInfo region, ulong regionhandle); |
45 | 45 | ||
46 | public delegate bool ChildAgentUpdate(ulong regionHandle, ChildAgentDataUpdate childUpdate); | ||
47 | |||
46 | public sealed class InterRegionSingleton | 48 | public sealed class InterRegionSingleton |
47 | { | 49 | { |
48 | private static readonly InterRegionSingleton instance = new InterRegionSingleton(); | 50 | private static readonly InterRegionSingleton instance = new InterRegionSingleton(); |
@@ -52,6 +54,7 @@ namespace OpenSim.Region.Communications.OGS1 | |||
52 | public event InformRegionPrimGroup OnPrimGroupNear; | 54 | public event InformRegionPrimGroup OnPrimGroupNear; |
53 | public event PrimGroupArrival OnPrimGroupArrival; | 55 | public event PrimGroupArrival OnPrimGroupArrival; |
54 | public event RegionUp OnRegionUp; | 56 | public event RegionUp OnRegionUp; |
57 | public event ChildAgentUpdate OnChildAgentUpdate; | ||
55 | 58 | ||
56 | 59 | ||
57 | static InterRegionSingleton() | 60 | static InterRegionSingleton() |
@@ -86,6 +89,15 @@ namespace OpenSim.Region.Communications.OGS1 | |||
86 | return false; | 89 | return false; |
87 | } | 90 | } |
88 | 91 | ||
92 | public bool ChildAgentUpdate(ulong regionHandle, ChildAgentDataUpdate cAgentUpdate) | ||
93 | { | ||
94 | if (OnChildAgentUpdate != null) | ||
95 | { | ||
96 | return OnChildAgentUpdate(regionHandle, cAgentUpdate); | ||
97 | } | ||
98 | return false; | ||
99 | } | ||
100 | |||
89 | public bool ExpectAvatarCrossing(ulong regionHandle, LLUUID agentID, LLVector3 position, bool isFlying) | 101 | public bool ExpectAvatarCrossing(ulong regionHandle, LLUUID agentID, LLVector3 position, bool isFlying) |
90 | { | 102 | { |
91 | if (OnArrival != null) | 103 | if (OnArrival != null) |
@@ -143,6 +155,20 @@ namespace OpenSim.Region.Communications.OGS1 | |||
143 | } | 155 | } |
144 | } | 156 | } |
145 | 157 | ||
158 | public bool ChildAgentUpdate(ulong regionHandle, ChildAgentDataUpdate cAgentData) | ||
159 | { | ||
160 | try | ||
161 | { | ||
162 | return InterRegionSingleton.Instance.ChildAgentUpdate(regionHandle,cAgentData); | ||
163 | } | ||
164 | catch (RemotingException e) | ||
165 | { | ||
166 | Console.WriteLine("Remoting Error: Unable to send Child agent update to remote region.\n" + e.ToString()); | ||
167 | return false; | ||
168 | } | ||
169 | |||
170 | } | ||
171 | |||
146 | public bool ExpectAvatarCrossing(ulong regionHandle, Guid agentID, sLLVector3 position, bool isFlying) | 172 | public bool ExpectAvatarCrossing(ulong regionHandle, Guid agentID, sLLVector3 position, bool isFlying) |
147 | { | 173 | { |
148 | try | 174 | try |