aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/CoreModules/Avatar/InstantMessage/OfflineMessageModule.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/CoreModules/Avatar/InstantMessage/OfflineMessageModule.cs')
-rw-r--r--OpenSim/Region/CoreModules/Avatar/InstantMessage/OfflineMessageModule.cs81
1 files changed, 45 insertions, 36 deletions
diff --git a/OpenSim/Region/CoreModules/Avatar/InstantMessage/OfflineMessageModule.cs b/OpenSim/Region/CoreModules/Avatar/InstantMessage/OfflineMessageModule.cs
index ff38b6f..fdfcd10 100644
--- a/OpenSim/Region/CoreModules/Avatar/InstantMessage/OfflineMessageModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/InstantMessage/OfflineMessageModule.cs
@@ -40,82 +40,91 @@ using OpenSim.Region.Framework.Scenes;
40 40
41namespace OpenSim.Region.CoreModules.Avatar.InstantMessage 41namespace OpenSim.Region.CoreModules.Avatar.InstantMessage
42{ 42{
43 public class OfflineMessageModule : IRegionModule 43 public class OfflineMessageModule : ISharedRegionModule
44 { 44 {
45 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 45 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
46 46
47 private bool enabled = true; 47 private bool enabled = true;
48 private List<Scene> m_SceneList = new List<Scene>(); 48 private List<Scene> m_SceneList = new List<Scene>();
49 private string m_RestURL = String.Empty; 49 private string m_RestURL = String.Empty;
50 IMessageTransferModule m_TransferModule = null;
50 private bool m_ForwardOfflineGroupMessages = true; 51 private bool m_ForwardOfflineGroupMessages = true;
51 52
52 public void Initialise(Scene scene, IConfigSource config) 53 public void Initialise(IConfigSource config)
53 { 54 {
54 if (!enabled)
55 return;
56
57 IConfig cnf = config.Configs["Messaging"]; 55 IConfig cnf = config.Configs["Messaging"];
58 if (cnf == null) 56 if (cnf == null)
59 { 57 {
60 enabled = false; 58 enabled = false;
61 return; 59 return;
62 } 60 }
63 if (cnf != null && cnf.GetString( 61 if (cnf != null && cnf.GetString("OfflineMessageModule", "None") !=
64 "OfflineMessageModule", "None") !=
65 "OfflineMessageModule") 62 "OfflineMessageModule")
66 { 63 {
67 enabled = false; 64 enabled = false;
68 return; 65 return;
69 } 66 }
70 67
71 if (cnf != null) 68 m_RestURL = cnf.GetString("OfflineMessageURL", "");
72 m_ForwardOfflineGroupMessages = cnf.GetBoolean("ForwardOfflineGroupMessages", m_ForwardOfflineGroupMessages); 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
76 m_ForwardOfflineGroupMessages = cnf.GetBoolean("ForwardOfflineGroupMessages", m_ForwardOfflineGroupMessages);
77 }
78
79 public void AddRegion(Scene scene)
80 {
81 if (!enabled)
82 return;
73 83
74 lock (m_SceneList) 84 lock (m_SceneList)
75 { 85 {
76 if (m_SceneList.Count == 0) 86 m_SceneList.Add(scene);
77 {
78 m_RestURL = cnf.GetString("OfflineMessageURL", "");
79 if (m_RestURL == "")
80 {
81 m_log.Error("[OFFLINE MESSAGING] Module was enabled, but no URL is given, disabling");
82 enabled = false;
83 return;
84 }
85 }
86 if (!m_SceneList.Contains(scene))
87 m_SceneList.Add(scene);
88 87
89 scene.EventManager.OnNewClient += OnNewClient; 88 scene.EventManager.OnNewClient += OnNewClient;
90 } 89 }
91 } 90 }
92 91
93 public void PostInitialise() 92 public void RegionLoaded(Scene scene)
94 { 93 {
95 if (!enabled) 94 if (!enabled)
96 return; 95 return;
97 96
98 if (m_SceneList.Count == 0) 97 if (m_TransferModule == null)
99 return;
100
101 IMessageTransferModule trans = m_SceneList[0].RequestModuleInterface<IMessageTransferModule>();
102 if (trans == null)
103 { 98 {
104 enabled = false; 99 m_TransferModule = scene.RequestModuleInterface<IMessageTransferModule>();
105 100 if (m_TransferModule == null)
106 lock (m_SceneList)
107 { 101 {
108 foreach (Scene s in m_SceneList) 102 scene.EventManager.OnNewClient -= OnNewClient;
109 s.EventManager.OnNewClient -= OnNewClient;
110 103
104 enabled = false;
111 m_SceneList.Clear(); 105 m_SceneList.Clear();
106
107 m_log.Error("[OFFLINE MESSAGING] No message transfer module is enabled. Diabling offline messages");
112 } 108 }
109 m_TransferModule.OnUndeliveredMessage += UndeliveredMessage;
110 }
111 }
113 112
114 m_log.Error("[OFFLINE MESSAGING] No message transfer module is enabled. Diabling offline messages"); 113 public void RemoveRegion(Scene scene)
114 {
115 if (!enabled)
115 return; 116 return;
117
118 lock (m_SceneList)
119 {
120 m_SceneList.Remove(scene);
116 } 121 }
122 }
117 123
118 trans.OnUndeliveredMessage += UndeliveredMessage; 124 public void PostInitialise()
125 {
126 if (!enabled)
127 return;
119 128
120 m_log.Debug("[OFFLINE MESSAGING] Offline messages enabled"); 129 m_log.Debug("[OFFLINE MESSAGING] Offline messages enabled");
121 } 130 }
@@ -125,9 +134,9 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage
125 get { return "OfflineMessageModule"; } 134 get { return "OfflineMessageModule"; }
126 } 135 }
127 136
128 public bool IsSharedModule 137 public Type ReplaceableInterface
129 { 138 {
130 get { return true; } 139 get { return null; }
131 } 140 }
132 141
133 public void Close() 142 public void Close()