aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/CoreModules/Avatar/InstantMessage/OfflineMessageModule.cs
diff options
context:
space:
mode:
authorMelanie Thielker2009-03-29 00:48:34 +0000
committerMelanie Thielker2009-03-29 00:48:34 +0000
commit404bfdc9a6828638b7b4f7851602e3fe77044025 (patch)
tree9fd740bfab5967e70b9997c082f1dfd7fcecd2e2 /OpenSim/Region/CoreModules/Avatar/InstantMessage/OfflineMessageModule.cs
parentMinor bug fix in UpdateItem (meta data). (diff)
downloadopensim-SC_OLD-404bfdc9a6828638b7b4f7851602e3fe77044025.zip
opensim-SC_OLD-404bfdc9a6828638b7b4f7851602e3fe77044025.tar.gz
opensim-SC_OLD-404bfdc9a6828638b7b4f7851602e3fe77044025.tar.bz2
opensim-SC_OLD-404bfdc9a6828638b7b4f7851602e3fe77044025.tar.xz
Finish the offline IM module (still needs a server). Add rudimentary
support for the mute list (no functionality yet, but allows the RetrieveInstantMessages event to fire now).
Diffstat (limited to 'OpenSim/Region/CoreModules/Avatar/InstantMessage/OfflineMessageModule.cs')
-rw-r--r--OpenSim/Region/CoreModules/Avatar/InstantMessage/OfflineMessageModule.cs69
1 files changed, 61 insertions, 8 deletions
diff --git a/OpenSim/Region/CoreModules/Avatar/InstantMessage/OfflineMessageModule.cs b/OpenSim/Region/CoreModules/Avatar/InstantMessage/OfflineMessageModule.cs
index 77bc9d7..814b2de 100644
--- a/OpenSim/Region/CoreModules/Avatar/InstantMessage/OfflineMessageModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/InstantMessage/OfflineMessageModule.cs
@@ -24,12 +24,15 @@
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */ 26 */
27using System;
27using System.Collections.Generic; 28using System.Collections.Generic;
28using System.Reflection; 29using System.Reflection;
29using log4net; 30using log4net;
30using Nini.Config; 31using Nini.Config;
31using OpenMetaverse; 32using OpenMetaverse;
32using OpenSim.Framework; 33using OpenSim.Framework;
34using OpenSim.Framework.Communications;
35using OpenSim.Framework.Servers;
33using OpenSim.Framework.Client; 36using OpenSim.Framework.Client;
34using OpenSim.Region.Framework.Interfaces; 37using OpenSim.Region.Framework.Interfaces;
35using OpenSim.Region.Framework.Scenes; 38using OpenSim.Region.Framework.Scenes;
@@ -40,21 +43,36 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage
40 { 43 {
41 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 44 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
42 45
43 private bool enabled = false; 46 private bool enabled = true;
44 private List<Scene> m_SceneList = new List<Scene>(); 47 private List<Scene> m_SceneList = new List<Scene>();
48 private string m_RestURL = String.Empty;
45 49
46 public void Initialise(Scene scene, IConfigSource config) 50 public void Initialise(Scene scene, IConfigSource config)
47 { 51 {
52 if (!enabled)
53 return;
54
48 IConfig cnf = config.Configs["Messaging"]; 55 IConfig cnf = config.Configs["Messaging"];
49 if (cnf != null && cnf.GetString( 56 if (cnf != null && cnf.GetString(
50 "OfflineMessageModule", "None") != 57 "OfflineMessageModule", "None") !=
51 "OfflineMessageModule") 58 "OfflineMessageModule")
59 {
60 enabled = false;
52 return; 61 return;
53 62 }
54 enabled = true;
55 63
56 lock (m_SceneList) 64 lock (m_SceneList)
57 { 65 {
66 if (m_SceneList.Count == 0)
67 {
68 m_RestURL = cnf.GetString("OfflineMessageURL", "");
69 if (m_RestURL == "")
70 {
71 m_log.Error("[OFFLINE MESSAGING] Module was enabled, but no URL is given, disabling");
72 enabled = false;
73 return;
74 }
75 }
58 if (!m_SceneList.Contains(scene)) 76 if (!m_SceneList.Contains(scene))
59 m_SceneList.Add(scene); 77 m_SceneList.Add(scene);
60 78
@@ -64,6 +82,9 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage
64 82
65 public void PostInitialise() 83 public void PostInitialise()
66 { 84 {
85 if (!enabled)
86 return;
87
67 if (m_SceneList.Count == 0) 88 if (m_SceneList.Count == 0)
68 return; 89 return;
69 90
@@ -80,6 +101,7 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage
80 m_SceneList.Clear(); 101 m_SceneList.Clear();
81 } 102 }
82 103
104 m_log.Error("[OFFLINE MESSAGING] No message transfer module is enabled. Diabling offline messages");
83 return; 105 return;
84 } 106 }
85 107
@@ -107,7 +129,7 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage
107 foreach (Scene s in m_SceneList) 129 foreach (Scene s in m_SceneList)
108 { 130 {
109 ScenePresence presence = s.GetScenePresence(agentID); 131 ScenePresence presence = s.GetScenePresence(agentID);
110 if (!presence.IsChildAgent) 132 if (presence != null && !presence.IsChildAgent)
111 return presence.ControllingClient; 133 return presence.ControllingClient;
112 } 134 }
113 return null; 135 return null;
@@ -116,18 +138,49 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage
116 private void OnNewClient(IClientAPI client) 138 private void OnNewClient(IClientAPI client)
117 { 139 {
118 client.OnRetrieveInstantMessages += RetrieveInstantMessages; 140 client.OnRetrieveInstantMessages += RetrieveInstantMessages;
141 // TODO:: Remove when mute lists are supported
142 //
143 //client.OnEconomyDataRequest += OnEconomyDataRequest;
119 } 144 }
120 145
146 // TODO: Remove method when mute lists are supported
147 //
148 //private void OnEconomyDataRequest(UUID agentID)
149 //{
150 // IClientAPI client = FindClient(agentID);
151 // if (client == null)
152 // {
153 // m_log.ErrorFormat("[OFFLINE MESSAGING] Can't find client {0}", agentID.ToString());
154 // return;
155 // }
156 // RetrieveInstantMessages(client);
157 //}
158
121 private void RetrieveInstantMessages(IClientAPI client) 159 private void RetrieveInstantMessages(IClientAPI client)
122 { 160 {
123 m_log.Debug("[OFFLINE MESSAGING] RetrieveInstantMessages called"); 161 m_log.DebugFormat("[OFFLINE MESSAGING] Retrieving stored messages for {0}", client.AgentId);
162
163 List<GridInstantMessage>msglist = SynchronousRestObjectPoster.BeginPostObject<UUID, List<GridInstantMessage>>(
164 "POST", m_RestURL+"/RetrieveMessages/", client.AgentId);
165
166 foreach (GridInstantMessage im in msglist)
167 {
168 DateTime saved = Util.ToDateTime((uint)im.timestamp);
169
170 client.SendInstantMessage(new UUID(im.toAgentID),
171 "(saved " + saved.ToString() + ") " + im.message,
172 new UUID(im.fromAgentID), im.fromAgentName,
173 (byte)im.dialog,
174 (uint)im.timestamp);
175 }
124 } 176 }
125 177
126 private void UndeliveredMessage(GridInstantMessage im) 178 private void UndeliveredMessage(GridInstantMessage im)
127 { 179 {
128 if (im.offline != 0) 180 if (im.offline != 0)
129 { 181 {
130 // TODO: Actually save it 182 bool success = SynchronousRestObjectPoster.BeginPostObject<GridInstantMessage, bool>(
183 "POST", m_RestURL+"/SaveMessage/", im);
131 184
132 if(im.dialog == (byte)InstantMessageDialog.MessageFromAgent) 185 if(im.dialog == (byte)InstantMessageDialog.MessageFromAgent)
133 { 186 {
@@ -137,9 +190,9 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage
137 190
138 client.SendInstantMessage(new UUID(im.fromAgentID), 191 client.SendInstantMessage(new UUID(im.fromAgentID),
139 "User is not logged in. "+ 192 "User is not logged in. "+
140 "Message saved.", 193 (success ? "Message saved." : "Message not saved"),
141 new UUID(im.toAgentID), "System", 194 new UUID(im.toAgentID), "System",
142 (byte)InstantMessageDialog.BusyAutoResponse, 195 (byte)InstantMessageDialog.MessageFromAgent,
143 (uint)Util.UnixTimeSinceEpoch()); 196 (uint)Util.UnixTimeSinceEpoch());
144 } 197 }
145 } 198 }