diff options
Diffstat (limited to 'OpenSim/Region/OptionalModules/Avatar/Chat/RegionState.cs')
-rw-r--r-- | OpenSim/Region/OptionalModules/Avatar/Chat/RegionState.cs | 96 |
1 files changed, 59 insertions, 37 deletions
diff --git a/OpenSim/Region/OptionalModules/Avatar/Chat/RegionState.cs b/OpenSim/Region/OptionalModules/Avatar/Chat/RegionState.cs index 53b103e..d4fe5e0 100644 --- a/OpenSim/Region/OptionalModules/Avatar/Chat/RegionState.cs +++ b/OpenSim/Region/OptionalModules/Avatar/Chat/RegionState.cs | |||
@@ -41,49 +41,71 @@ namespace OpenSim.Region.OptionalModules.Avatar.Chat | |||
41 | 41 | ||
42 | internal class RegionState | 42 | internal class RegionState |
43 | { | 43 | { |
44 | |||
45 | private static readonly ILog m_log = | 44 | private static readonly ILog m_log = |
46 | LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | 45 | LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
47 | 46 | ||
48 | private static readonly OpenMetaverse.Vector3 CenterOfRegion = new OpenMetaverse.Vector3(((int)Constants.RegionSize * 0.5f), ((int)Constants.RegionSize * 0.5f), 20); | 47 | private static readonly OpenMetaverse.Vector3 CenterOfRegion = new OpenMetaverse.Vector3(((int)Constants.RegionSize * 0.5f), ((int)Constants.RegionSize * 0.5f), 20); |
49 | private const int DEBUG_CHANNEL = 2147483647; | 48 | private const int DEBUG_CHANNEL = 2147483647; |
50 | 49 | ||
51 | private static int _idk_ = 0; | 50 | private static int _idk_ = 0; |
52 | 51 | ||
53 | // Runtime variables; these values are assigned when the | 52 | // Runtime variables; these values are assigned when the |
54 | // IrcState is created and remain constant thereafter. | 53 | // IrcState is created and remain constant thereafter. |
55 | 54 | ||
56 | internal string Region = String.Empty; | 55 | internal string Region = String.Empty; |
57 | internal string Host = String.Empty; | 56 | internal string Host = String.Empty; |
58 | internal string LocX = String.Empty; | 57 | internal string LocX = String.Empty; |
59 | internal string LocY = String.Empty; | 58 | internal string LocY = String.Empty; |
60 | internal string IDK = String.Empty; | 59 | internal string IDK = String.Empty; |
61 | 60 | ||
62 | // System values - used only be the IRC classes themselves | 61 | // System values - used only be the IRC classes themselves |
63 | 62 | ||
64 | internal ChannelState cs = null; // associated IRC configuration | 63 | internal ChannelState cs = null; // associated IRC configuration |
65 | internal Scene scene = null; // associated scene | 64 | internal Scene scene = null; // associated scene |
66 | internal IConfig config = null; // configuration file reference | 65 | internal IConfig config = null; // configuration file reference |
67 | internal bool enabled = true; | 66 | internal bool enabled = true; |
68 | 67 | ||
68 | //AgentAlert | ||
69 | internal bool showAlert = false; | ||
70 | internal string alertMessage = String.Empty; | ||
71 | internal IDialogModule dialogModule = null; | ||
72 | |||
69 | // This list is used to keep track of who is here, and by | 73 | // This list is used to keep track of who is here, and by |
70 | // implication, who is not. | 74 | // implication, who is not. |
71 | 75 | ||
72 | internal List<IClientAPI> clients = new List<IClientAPI>(); | 76 | internal List<IClientAPI> clients = new List<IClientAPI>(); |
73 | 77 | ||
74 | // Setup runtime variable values | 78 | // Setup runtime variable values |
75 | 79 | ||
76 | public RegionState(Scene p_scene, IConfig p_config) | 80 | public RegionState(Scene p_scene, IConfig p_config) |
77 | { | 81 | { |
78 | 82 | scene = p_scene; | |
79 | scene = p_scene; | ||
80 | config = p_config; | 83 | config = p_config; |
81 | 84 | ||
82 | Region = scene.RegionInfo.RegionName; | 85 | Region = scene.RegionInfo.RegionName; |
83 | Host = scene.RegionInfo.ExternalHostName; | 86 | Host = scene.RegionInfo.ExternalHostName; |
84 | LocX = Convert.ToString(scene.RegionInfo.RegionLocX); | 87 | LocX = Convert.ToString(scene.RegionInfo.RegionLocX); |
85 | LocY = Convert.ToString(scene.RegionInfo.RegionLocY); | 88 | LocY = Convert.ToString(scene.RegionInfo.RegionLocY); |
86 | IDK = Convert.ToString(_idk_++); | 89 | IDK = Convert.ToString(_idk_++); |
90 | |||
91 | showAlert = config.GetBoolean("alert_show", false); | ||
92 | string alertServerInfo = String.Empty; | ||
93 | |||
94 | if (showAlert) | ||
95 | { | ||
96 | bool showAlertServerInfo = config.GetBoolean("alert_show_serverinfo", true); | ||
97 | |||
98 | if (showAlertServerInfo) | ||
99 | alertServerInfo = String.Format("\nServer: {0}\nPort: {1}\nChannel: {2}\n\n", | ||
100 | config.GetString("server", ""), config.GetString("port", ""), config.GetString("channel", "")); | ||
101 | |||
102 | string alertPreMessage = config.GetString("alert_msg_pre", "This region is linked to Irc."); | ||
103 | string alertPostMessage = config.GetString("alert_msg_post", "Everything you say in public chat can be listened."); | ||
104 | |||
105 | alertMessage = String.Format("{0}\n{1}{2}", alertPreMessage, alertServerInfo, alertPostMessage); | ||
106 | |||
107 | dialogModule = scene.RequestModuleInterface<IDialogModule>(); | ||
108 | } | ||
87 | 109 | ||
88 | // OpenChannel conditionally establishes a connection to the | 110 | // OpenChannel conditionally establishes a connection to the |
89 | // IRC server. The request will either succeed, or it will | 111 | // IRC server. The request will either succeed, or it will |
@@ -93,9 +115,9 @@ namespace OpenSim.Region.OptionalModules.Avatar.Chat | |||
93 | 115 | ||
94 | // Connect channel to world events | 116 | // Connect channel to world events |
95 | 117 | ||
96 | scene.EventManager.OnChatFromWorld += OnSimChat; | 118 | scene.EventManager.OnChatFromWorld += OnSimChat; |
97 | scene.EventManager.OnChatFromClient += OnSimChat; | 119 | scene.EventManager.OnChatFromClient += OnSimChat; |
98 | scene.EventManager.OnMakeRootAgent += OnMakeRootAgent; | 120 | scene.EventManager.OnMakeRootAgent += OnMakeRootAgent; |
99 | scene.EventManager.OnMakeChildAgent += OnMakeChildAgent; | 121 | scene.EventManager.OnMakeChildAgent += OnMakeChildAgent; |
100 | 122 | ||
101 | m_log.InfoFormat("[IRC-Region {0}] Initialization complete", Region); | 123 | m_log.InfoFormat("[IRC-Region {0}] Initialization complete", Region); |
@@ -106,8 +128,8 @@ namespace OpenSim.Region.OptionalModules.Avatar.Chat | |||
106 | 128 | ||
107 | ~RegionState() | 129 | ~RegionState() |
108 | { | 130 | { |
109 | if (cs != null) | 131 | if (cs != null) |
110 | cs.RemoveRegion(this); | 132 | cs.RemoveRegion(this); |
111 | } | 133 | } |
112 | 134 | ||
113 | // Called by PostInitialize after all regions have been created | 135 | // Called by PostInitialize after all regions have been created |
@@ -138,7 +160,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Chat | |||
138 | { | 160 | { |
139 | if (clients.Contains(client)) | 161 | if (clients.Contains(client)) |
140 | { | 162 | { |
141 | if (enabled && (cs.irc.Enabled) && (cs.irc.Connected) && (cs.ClientReporting)) | 163 | if (enabled && (cs.irc.Enabled) && (cs.irc.Connected) && (cs.ClientReporting)) |
142 | { | 164 | { |
143 | m_log.InfoFormat("[IRC-Region {0}]: {1} has left", Region, client.Name); | 165 | m_log.InfoFormat("[IRC-Region {0}]: {1} has left", Region, client.Name); |
144 | //Check if this person is excluded from IRC | 166 | //Check if this person is excluded from IRC |
@@ -147,7 +169,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Chat | |||
147 | cs.irc.PrivMsg(cs.NoticeMessageFormat, cs.irc.Nick, Region, String.Format("{0} has left", client.Name)); | 169 | cs.irc.PrivMsg(cs.NoticeMessageFormat, cs.irc.Nick, Region, String.Format("{0} has left", client.Name)); |
148 | } | 170 | } |
149 | } | 171 | } |
150 | client.OnLogout -= OnClientLoggedOut; | 172 | client.OnLogout -= OnClientLoggedOut; |
151 | client.OnConnectionClosed -= OnClientLoggedOut; | 173 | client.OnConnectionClosed -= OnClientLoggedOut; |
152 | clients.Remove(client); | 174 | clients.Remove(client); |
153 | } | 175 | } |
@@ -171,13 +193,13 @@ namespace OpenSim.Region.OptionalModules.Avatar.Chat | |||
171 | { | 193 | { |
172 | if (clients.Contains(client)) | 194 | if (clients.Contains(client)) |
173 | { | 195 | { |
174 | if (enabled && (cs.irc.Enabled) && (cs.irc.Connected) && (cs.ClientReporting)) | 196 | if (enabled && (cs.irc.Enabled) && (cs.irc.Connected) && (cs.ClientReporting)) |
175 | { | 197 | { |
176 | string clientName = String.Format("{0} {1}", presence.Firstname, presence.Lastname); | 198 | string clientName = String.Format("{0} {1}", presence.Firstname, presence.Lastname); |
177 | m_log.DebugFormat("[IRC-Region {0}] {1} has left", Region, clientName); | 199 | m_log.DebugFormat("[IRC-Region {0}] {1} has left", Region, clientName); |
178 | cs.irc.PrivMsg(cs.NoticeMessageFormat, cs.irc.Nick, Region, String.Format("{0} has left", clientName)); | 200 | cs.irc.PrivMsg(cs.NoticeMessageFormat, cs.irc.Nick, Region, String.Format("{0} has left", clientName)); |
179 | } | 201 | } |
180 | client.OnLogout -= OnClientLoggedOut; | 202 | client.OnLogout -= OnClientLoggedOut; |
181 | client.OnConnectionClosed -= OnClientLoggedOut; | 203 | client.OnConnectionClosed -= OnClientLoggedOut; |
182 | clients.Remove(client); | 204 | clients.Remove(client); |
183 | } | 205 | } |
@@ -195,14 +217,13 @@ namespace OpenSim.Region.OptionalModules.Avatar.Chat | |||
195 | 217 | ||
196 | private void OnMakeRootAgent(ScenePresence presence) | 218 | private void OnMakeRootAgent(ScenePresence presence) |
197 | { | 219 | { |
198 | |||
199 | IClientAPI client = presence.ControllingClient; | 220 | IClientAPI client = presence.ControllingClient; |
200 | 221 | ||
201 | try | 222 | try |
202 | { | 223 | { |
203 | if (!clients.Contains(client)) | 224 | if (!clients.Contains(client)) |
204 | { | 225 | { |
205 | client.OnLogout += OnClientLoggedOut; | 226 | client.OnLogout += OnClientLoggedOut; |
206 | client.OnConnectionClosed += OnClientLoggedOut; | 227 | client.OnConnectionClosed += OnClientLoggedOut; |
207 | clients.Add(client); | 228 | clients.Add(client); |
208 | if (enabled && (cs.irc.Enabled) && (cs.irc.Connected) && (cs.ClientReporting)) | 229 | if (enabled && (cs.irc.Enabled) && (cs.irc.Connected) && (cs.ClientReporting)) |
@@ -216,17 +237,18 @@ namespace OpenSim.Region.OptionalModules.Avatar.Chat | |||
216 | } | 237 | } |
217 | } | 238 | } |
218 | } | 239 | } |
240 | |||
241 | if (dialogModule != null && showAlert) | ||
242 | dialogModule.SendAlertToUser(client, alertMessage, true); | ||
219 | } | 243 | } |
220 | catch (Exception ex) | 244 | catch (Exception ex) |
221 | { | 245 | { |
222 | m_log.ErrorFormat("[IRC-Region {0}]: MakeRootAgent exception: {1}", Region, ex.Message); | 246 | m_log.ErrorFormat("[IRC-Region {0}]: MakeRootAgent exception: {1}", Region, ex.Message); |
223 | m_log.Debug(ex); | 247 | m_log.Debug(ex); |
224 | } | 248 | } |
225 | |||
226 | } | 249 | } |
227 | 250 | ||
228 | // This handler detects chat events int he virtual world. | 251 | // This handler detects chat events int he virtual world. |
229 | |||
230 | public void OnSimChat(Object sender, OSChatMessage msg) | 252 | public void OnSimChat(Object sender, OSChatMessage msg) |
231 | { | 253 | { |
232 | 254 | ||
@@ -317,14 +339,14 @@ namespace OpenSim.Region.OptionalModules.Avatar.Chat | |||
317 | // that evident. | 339 | // that evident. |
318 | 340 | ||
319 | default: | 341 | default: |
320 | m_log.DebugFormat("[IRC-Region {0}] Forwarding unrecognized command to IRC : {1}", | 342 | m_log.DebugFormat("[IRC-Region {0}] Forwarding unrecognized command to IRC : {1}", |
321 | Region, msg.Message); | 343 | Region, msg.Message); |
322 | cs.irc.Send(msg.Message); | 344 | cs.irc.Send(msg.Message); |
323 | break; | 345 | break; |
324 | } | 346 | } |
325 | } | 347 | } |
326 | catch (Exception ex) | 348 | catch (Exception ex) |
327 | { | 349 | { |
328 | m_log.WarnFormat("[IRC-Region {0}] error processing in-world command channel input: {1}", | 350 | m_log.WarnFormat("[IRC-Region {0}] error processing in-world command channel input: {1}", |
329 | Region, ex.Message); | 351 | Region, ex.Message); |
330 | m_log.Debug(ex); | 352 | m_log.Debug(ex); |
@@ -366,7 +388,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Chat | |||
366 | 388 | ||
367 | m_log.DebugFormat("[IRC-Region {0}] heard on channel {1} : {2}", Region, msg.Channel, msg.Message); | 389 | m_log.DebugFormat("[IRC-Region {0}] heard on channel {1} : {2}", Region, msg.Channel, msg.Message); |
368 | 390 | ||
369 | if (null != avatar && cs.RelayChat && (msg.Channel == 0 || msg.Channel == DEBUG_CHANNEL)) | 391 | if (null != avatar && cs.RelayChat && (msg.Channel == 0 || msg.Channel == DEBUG_CHANNEL)) |
370 | { | 392 | { |
371 | string txt = msg.Message; | 393 | string txt = msg.Message; |
372 | if (txt.StartsWith("/me ")) | 394 | if (txt.StartsWith("/me ")) |
@@ -376,13 +398,13 @@ namespace OpenSim.Region.OptionalModules.Avatar.Chat | |||
376 | return; | 398 | return; |
377 | } | 399 | } |
378 | 400 | ||
379 | if (null == avatar && cs.RelayPrivateChannels && null != cs.AccessPassword && | 401 | if (null == avatar && cs.RelayPrivateChannels && null != cs.AccessPassword && |
380 | msg.Channel == cs.RelayChannelOut) | 402 | msg.Channel == cs.RelayChannelOut) |
381 | { | 403 | { |
382 | Match m = cs.AccessPasswordRegex.Match(msg.Message); | 404 | Match m = cs.AccessPasswordRegex.Match(msg.Message); |
383 | if (null != m) | 405 | if (null != m) |
384 | { | 406 | { |
385 | m_log.DebugFormat("[IRC] relaying message from {0}: {1}", m.Groups["avatar"].ToString(), | 407 | m_log.DebugFormat("[IRC] relaying message from {0}: {1}", m.Groups["avatar"].ToString(), |
386 | m.Groups["message"].ToString()); | 408 | m.Groups["message"].ToString()); |
387 | cs.irc.PrivMsg(cs.PrivateMessageFormat, m.Groups["avatar"].ToString(), | 409 | cs.irc.PrivMsg(cs.PrivateMessageFormat, m.Groups["avatar"].ToString(), |
388 | scene.RegionInfo.RegionName, m.Groups["message"].ToString()); | 410 | scene.RegionInfo.RegionName, m.Groups["message"].ToString()); |