diff options
author | Dr Scofield | 2008-05-30 12:29:30 +0000 |
---|---|---|
committer | Dr Scofield | 2008-05-30 12:29:30 +0000 |
commit | 9590e671e6efc5c8da74f22b7038f1ce10501620 (patch) | |
tree | b9a84a11f2c48c9d43dd3de1fc9a9111ff32c5ab /OpenSim/Region/Environment/Modules | |
parent | * This is Melanie's XEngine script engine. I've not tested this real well, h... (diff) | |
download | opensim-SC-9590e671e6efc5c8da74f22b7038f1ce10501620.zip opensim-SC-9590e671e6efc5c8da74f22b7038f1ce10501620.tar.gz opensim-SC-9590e671e6efc5c8da74f22b7038f1ce10501620.tar.bz2 opensim-SC-9590e671e6efc5c8da74f22b7038f1ce10501620.tar.xz |
while investigating why IRCBridgeModule.Close() was having no effect, i
noticed that Scene.Close() will only call Close on non-shared region
modules. i've now added code to SceneManager.Close() to collect all
shared region module from each scene before calling Scene.Close()
on it and then, once, all Scenes are closed, go through the list of
collected shared region modules and close them as well. SceneManager.Close()
is only called when we initiate a shutdown --- i've verified that a
Scene restart does not trigger the shutdown of shared modules :-)
also, this adds a couple of bug fixes to the IRCBridgeModule (which
after all didn't take kindly to being closed) as well as a check to
InterregionModule's Close() call.
finally, this fixes the RestPlugin's XmlWriter so that it no longer
includes the "xsd=..." and "xsi=..." junk.
Diffstat (limited to 'OpenSim/Region/Environment/Modules')
-rw-r--r-- | OpenSim/Region/Environment/Modules/Avatar/Chat/IRCBridgeModule.cs | 39 | ||||
-rw-r--r-- | OpenSim/Region/Environment/Modules/Grid/Interregion/InterregionModule.cs | 3 |
2 files changed, 28 insertions, 14 deletions
diff --git a/OpenSim/Region/Environment/Modules/Avatar/Chat/IRCBridgeModule.cs b/OpenSim/Region/Environment/Modules/Avatar/Chat/IRCBridgeModule.cs index 85262f5..befa89f 100644 --- a/OpenSim/Region/Environment/Modules/Avatar/Chat/IRCBridgeModule.cs +++ b/OpenSim/Region/Environment/Modules/Avatar/Chat/IRCBridgeModule.cs | |||
@@ -151,6 +151,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Chat | |||
151 | public void Close() | 151 | public void Close() |
152 | { | 152 | { |
153 | m_irc.Close(); | 153 | m_irc.Close(); |
154 | m_log.Info("[IRC] closed connection to IRC server"); | ||
154 | } | 155 | } |
155 | 156 | ||
156 | public string Name | 157 | public string Name |
@@ -324,9 +325,9 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Chat | |||
324 | // if IRC is enabled then just keep trying using a monitor thread | 325 | // if IRC is enabled then just keep trying using a monitor thread |
325 | public void IRCConnectRun() | 326 | public void IRCConnectRun() |
326 | { | 327 | { |
327 | while (true) | 328 | while (m_irc.Enabled) |
328 | { | 329 | { |
329 | if ((m_irc.Enabled) && (!m_irc.Connected)) | 330 | if (!m_irc.Connected) |
330 | { | 331 | { |
331 | m_irc.Connect(m_scenes); | 332 | m_irc.Connect(m_scenes); |
332 | } | 333 | } |
@@ -538,7 +539,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Chat | |||
538 | m_log.Info("[IRC]: ExtractMsg: " + input); | 539 | m_log.Info("[IRC]: ExtractMsg: " + input); |
539 | Dictionary<string, string> result = null; | 540 | Dictionary<string, string> result = null; |
540 | //string regex = @":(?<nick>\w*)!~(?<user>\S*) PRIVMSG (?<channel>\S+) :(?<msg>.*)"; | 541 | //string regex = @":(?<nick>\w*)!~(?<user>\S*) PRIVMSG (?<channel>\S+) :(?<msg>.*)"; |
541 | string regex = @":(?<nick>\w*)!(?<user>\S*) PRIVMSG (?<channel>\S+) :(?<msg>.*)"; | 542 | string regex = @":(?<nick>[\w-]*)!(?<user>\S*) PRIVMSG (?<channel>\S+) :(?<msg>.*)"; |
542 | Regex RE = new Regex(regex, RegexOptions.Multiline); | 543 | Regex RE = new Regex(regex, RegexOptions.Multiline); |
543 | MatchCollection matches = RE.Matches(input); | 544 | MatchCollection matches = RE.Matches(input); |
544 | 545 | ||
@@ -566,7 +567,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Chat | |||
566 | { | 567 | { |
567 | // IRC keep alive thread | 568 | // IRC keep alive thread |
568 | // send PING ever 15 seconds | 569 | // send PING ever 15 seconds |
569 | while (true) | 570 | while (m_enabled) |
570 | { | 571 | { |
571 | try | 572 | try |
572 | { | 573 | { |
@@ -579,8 +580,11 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Chat | |||
579 | } | 580 | } |
580 | catch (IOException) | 581 | catch (IOException) |
581 | { | 582 | { |
582 | m_log.Error("[IRC]: Disconnected from IRC server.(PingRun)"); | 583 | if (m_enabled) |
583 | Reconnect(); | 584 | { |
585 | m_log.Error("[IRC]: Disconnected from IRC server.(PingRun)"); | ||
586 | Reconnect(); | ||
587 | } | ||
584 | } | 588 | } |
585 | catch (Exception ex) | 589 | catch (Exception ex) |
586 | { | 590 | { |
@@ -593,7 +597,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Chat | |||
593 | { | 597 | { |
594 | string inputLine; | 598 | string inputLine; |
595 | LLVector3 pos = new LLVector3(128, 128, 20); | 599 | LLVector3 pos = new LLVector3(128, 128, 20); |
596 | while (true) | 600 | while (m_enabled) |
597 | { | 601 | { |
598 | try | 602 | try |
599 | { | 603 | { |
@@ -637,8 +641,11 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Chat | |||
637 | } | 641 | } |
638 | catch (IOException) | 642 | catch (IOException) |
639 | { | 643 | { |
640 | m_log.Error("[IRC]: ListenerRun IOException. Disconnected from IRC server ??? (ListenerRun)"); | 644 | if (m_enabled) |
641 | Reconnect(); | 645 | { |
646 | m_log.Error("[IRC]: ListenerRun IOException. Disconnected from IRC server ??? (ListenerRun)"); | ||
647 | Reconnect(); | ||
648 | } | ||
642 | } | 649 | } |
643 | catch (Exception ex) | 650 | catch (Exception ex) |
644 | { | 651 | { |
@@ -838,13 +845,19 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Chat | |||
838 | 845 | ||
839 | public void Close() | 846 | public void Close() |
840 | { | 847 | { |
841 | m_connected = false; | 848 | m_writer.WriteLine(String.Format("QUIT :{0} to {1} wormhole to {2} closing", |
842 | m_writer.WriteLine(String.Format("QUIT :{0} to {1} wormhole with {2} closing", m_nick, m_channel, m_server)); | 849 | m_nick, m_channel, m_server)); |
843 | m_writer.Flush(); | 850 | m_writer.Flush(); |
844 | listener.Abort(); | 851 | |
845 | pingSender.Abort(); | 852 | m_connected = false; |
853 | m_enabled = false; | ||
854 | |||
855 | // listener.Abort(); | ||
856 | // pingSender.Abort(); | ||
857 | |||
846 | m_writer.Close(); | 858 | m_writer.Close(); |
847 | m_reader.Close(); | 859 | m_reader.Close(); |
860 | |||
848 | m_tcp.Close(); | 861 | m_tcp.Close(); |
849 | } | 862 | } |
850 | } | 863 | } |
diff --git a/OpenSim/Region/Environment/Modules/Grid/Interregion/InterregionModule.cs b/OpenSim/Region/Environment/Modules/Grid/Interregion/InterregionModule.cs index 89ee61a..40d07de 100644 --- a/OpenSim/Region/Environment/Modules/Grid/Interregion/InterregionModule.cs +++ b/OpenSim/Region/Environment/Modules/Grid/Interregion/InterregionModule.cs | |||
@@ -169,7 +169,8 @@ namespace OpenSim.Region.Environment.Modules.Grid.Interregion | |||
169 | 169 | ||
170 | public void Close() | 170 | public void Close() |
171 | { | 171 | { |
172 | ChannelServices.UnregisterChannel(m_tcpChannel); | 172 | if (null != m_tcpChannel) |
173 | ChannelServices.UnregisterChannel(m_tcpChannel); | ||
173 | } | 174 | } |
174 | 175 | ||
175 | public string Name | 176 | public string Name |