diff options
Diffstat (limited to 'OpenSim/Region/Environment/Modules/InstantMessageModule.cs')
-rw-r--r-- | OpenSim/Region/Environment/Modules/InstantMessageModule.cs | 45 |
1 files changed, 35 insertions, 10 deletions
diff --git a/OpenSim/Region/Environment/Modules/InstantMessageModule.cs b/OpenSim/Region/Environment/Modules/InstantMessageModule.cs index 1e1d236..0967b70 100644 --- a/OpenSim/Region/Environment/Modules/InstantMessageModule.cs +++ b/OpenSim/Region/Environment/Modules/InstantMessageModule.cs | |||
@@ -52,6 +52,7 @@ namespace OpenSim.Region.Environment.Modules | |||
52 | { | 52 | { |
53 | m_scenes.Add(scene); | 53 | m_scenes.Add(scene); |
54 | scene.EventManager.OnNewClient += OnNewClient; | 54 | scene.EventManager.OnNewClient += OnNewClient; |
55 | scene.EventManager.OnGridInstantMessageToIMModule += OnGridInstantMessage; | ||
55 | } | 56 | } |
56 | } | 57 | } |
57 | 58 | ||
@@ -67,19 +68,29 @@ namespace OpenSim.Region.Environment.Modules | |||
67 | uint ParentEstateID, LLVector3 Position, LLUUID RegionID, | 68 | uint ParentEstateID, LLVector3 Position, LLUUID RegionID, |
68 | byte[] binaryBucket) | 69 | byte[] binaryBucket) |
69 | { | 70 | { |
70 | foreach (Scene scene in m_scenes) | 71 | |
72 | bool FriendDialog = ((dialog == (byte)38) || (dialog == (byte)39) || (dialog == (byte)40)); | ||
73 | |||
74 | // IM dialogs need to be pre-processed and have their sessionID filled by the server | ||
75 | // so the sim can match the transaction on the return packet. | ||
76 | |||
77 | // Don't send a Friend Dialog IM with a LLUUID.Zero session. | ||
78 | if (!(FriendDialog && imSessionID == LLUUID.Zero)) | ||
71 | { | 79 | { |
72 | if (scene.Entities.ContainsKey(toAgentID) && scene.Entities[toAgentID] is ScenePresence) | 80 | foreach (Scene scene in m_scenes) |
73 | { | 81 | { |
74 | // Local message | 82 | if (scene.Entities.ContainsKey(toAgentID) && scene.Entities[toAgentID] is ScenePresence) |
75 | ScenePresence user = (ScenePresence) scene.Entities[toAgentID]; | ||
76 | if (!user.IsChildAgent) | ||
77 | { | 83 | { |
78 | user.ControllingClient.SendInstantMessage(fromAgentID, fromAgentSession, message, | 84 | // Local message |
79 | toAgentID, imSessionID, fromAgentName, dialog, | 85 | ScenePresence user = (ScenePresence)scene.Entities[toAgentID]; |
80 | timestamp); | 86 | if (!user.IsChildAgent) |
81 | // Message sent | 87 | { |
82 | return; | 88 | user.ControllingClient.SendInstantMessage(fromAgentID, fromAgentSession, message, |
89 | toAgentID, imSessionID, fromAgentName, dialog, | ||
90 | timestamp); | ||
91 | // Message sent | ||
92 | return; | ||
93 | } | ||
83 | } | 94 | } |
84 | } | 95 | } |
85 | } | 96 | } |
@@ -87,6 +98,20 @@ namespace OpenSim.Region.Environment.Modules | |||
87 | // Still here, try send via Grid | 98 | // Still here, try send via Grid |
88 | // TODO | 99 | // TODO |
89 | } | 100 | } |
101 | |||
102 | // Trusty OSG1 called method. This method also gets called from the FriendsModule | ||
103 | // Turns out the sim has to send an instant message to the user to get it to show an accepted friend. | ||
104 | |||
105 | private void OnGridInstantMessage(GridInstantMessage msg) | ||
106 | { | ||
107 | // Trigger the above event handler | ||
108 | OnInstantMessage(new LLUUID(msg.fromAgentID), new LLUUID(msg.fromAgentSession), | ||
109 | new LLUUID(msg.toAgentID), new LLUUID(msg.imSessionID), msg.timestamp, msg.fromAgentName, | ||
110 | msg.message, msg.dialog, msg.fromGroup, msg.offline, msg.ParentEstateID, | ||
111 | new LLVector3(msg.Position.x,msg.Position.y,msg.Position.z), new LLUUID(msg.RegionID), | ||
112 | msg.binaryBucket); | ||
113 | |||
114 | } | ||
90 | 115 | ||
91 | public void PostInitialise() | 116 | public void PostInitialise() |
92 | { | 117 | { |