diff options
Diffstat (limited to 'OpenSim/Region/Environment/Modules/ChatModule.cs')
-rw-r--r-- | OpenSim/Region/Environment/Modules/ChatModule.cs | 103 |
1 files changed, 50 insertions, 53 deletions
diff --git a/OpenSim/Region/Environment/Modules/ChatModule.cs b/OpenSim/Region/Environment/Modules/ChatModule.cs index 749a923..82bd2ec 100644 --- a/OpenSim/Region/Environment/Modules/ChatModule.cs +++ b/OpenSim/Region/Environment/Modules/ChatModule.cs | |||
@@ -43,8 +43,9 @@ namespace OpenSim.Region.Environment.Modules | |||
43 | { | 43 | { |
44 | public class ChatModule : IRegionModule, ISimChat | 44 | public class ChatModule : IRegionModule, ISimChat |
45 | { | 45 | { |
46 | private static readonly log4net.ILog m_log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); | ||
47 | |||
46 | private List<Scene> m_scenes = new List<Scene>(); | 48 | private List<Scene> m_scenes = new List<Scene>(); |
47 | private LogBase m_log; | ||
48 | 49 | ||
49 | private int m_whisperdistance = 10; | 50 | private int m_whisperdistance = 10; |
50 | private int m_saydistance = 30; | 51 | private int m_saydistance = 30; |
@@ -59,11 +60,6 @@ namespace OpenSim.Region.Environment.Modules | |||
59 | internal object m_syncLogout = new object(); | 60 | internal object m_syncLogout = new object(); |
60 | private Thread m_irc_connector=null; | 61 | private Thread m_irc_connector=null; |
61 | 62 | ||
62 | public ChatModule() | ||
63 | { | ||
64 | m_log = MainLog.Instance; | ||
65 | } | ||
66 | |||
67 | public void Initialise(Scene scene, IConfigSource config) | 63 | public void Initialise(Scene scene, IConfigSource config) |
68 | { | 64 | { |
69 | lock (m_syncInit) | 65 | lock (m_syncInit) |
@@ -159,7 +155,7 @@ namespace OpenSim.Region.Environment.Modules | |||
159 | } | 155 | } |
160 | catch (Exception ex) | 156 | catch (Exception ex) |
161 | { | 157 | { |
162 | m_log.Error("IRC", "NewClient exception trap:" + ex.ToString()); | 158 | m_log.Error("[IRC]: NewClient exception trap:" + ex.ToString()); |
163 | } | 159 | } |
164 | } | 160 | } |
165 | 161 | ||
@@ -180,13 +176,13 @@ namespace OpenSim.Region.Environment.Modules | |||
180 | { | 176 | { |
181 | m_last_leaving_user = clientName; | 177 | m_last_leaving_user = clientName; |
182 | m_irc.PrivMsg(m_irc.Nick, "Sim", "notices " + clientName + " left " + clientRegion); | 178 | m_irc.PrivMsg(m_irc.Nick, "Sim", "notices " + clientName + " left " + clientRegion); |
183 | m_log.Verbose("IRC", "IRC watcher notices " + clientName + " left " + clientRegion); | 179 | m_log.Info("[IRC]: IRC watcher notices " + clientName + " left " + clientRegion); |
184 | } | 180 | } |
185 | } | 181 | } |
186 | } | 182 | } |
187 | catch (Exception ex) | 183 | catch (Exception ex) |
188 | { | 184 | { |
189 | m_log.Error("IRC", "ClientLoggedOut exception trap:" + ex.ToString()); | 185 | m_log.Error("[IRC]: ClientLoggedOut exception trap:" + ex.ToString()); |
190 | } | 186 | } |
191 | } | 187 | } |
192 | 188 | ||
@@ -319,6 +315,8 @@ namespace OpenSim.Region.Environment.Modules | |||
319 | 315 | ||
320 | internal class IRCChatModule | 316 | internal class IRCChatModule |
321 | { | 317 | { |
318 | private static readonly log4net.ILog m_log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); | ||
319 | |||
322 | private string m_server = null; | 320 | private string m_server = null; |
323 | private uint m_port = 6668; | 321 | private uint m_port = 6668; |
324 | private string m_user = "USER OpenSimBot 8 * :I'm a OpenSim to irc bot"; | 322 | private string m_user = "USER OpenSimBot 8 * :I'm a OpenSim to irc bot"; |
@@ -341,7 +339,6 @@ namespace OpenSim.Region.Environment.Modules | |||
341 | 339 | ||
342 | private List<Scene> m_scenes = null; | 340 | private List<Scene> m_scenes = null; |
343 | private List<Scene> m_last_scenes = null; | 341 | private List<Scene> m_last_scenes = null; |
344 | private LogBase m_log; | ||
345 | 342 | ||
346 | public IRCChatModule(IConfigSource config) | 343 | public IRCChatModule(IConfigSource config) |
347 | { | 344 | { |
@@ -388,9 +385,8 @@ namespace OpenSim.Region.Environment.Modules | |||
388 | } | 385 | } |
389 | catch (Exception) | 386 | catch (Exception) |
390 | { | 387 | { |
391 | MainLog.Instance.Verbose("CHAT", "No IRC config information, skipping IRC bridge configuration"); | 388 | m_log.Info("[CHAT]: No IRC config information, skipping IRC bridge configuration"); |
392 | } | 389 | } |
393 | m_log = MainLog.Instance; | ||
394 | } | 390 | } |
395 | 391 | ||
396 | public bool Connect(List<Scene> scenes) | 392 | public bool Connect(List<Scene> scenes) |
@@ -404,9 +400,9 @@ namespace OpenSim.Region.Environment.Modules | |||
404 | if (m_last_scenes == null) { m_last_scenes = scenes; } | 400 | if (m_last_scenes == null) { m_last_scenes = scenes; } |
405 | 401 | ||
406 | m_tcp = new TcpClient(m_server, (int)m_port); | 402 | m_tcp = new TcpClient(m_server, (int)m_port); |
407 | m_log.Verbose("IRC", "Connecting..."); | 403 | m_log.Info("[IRC]: Connecting..."); |
408 | m_stream = m_tcp.GetStream(); | 404 | m_stream = m_tcp.GetStream(); |
409 | m_log.Verbose("IRC", "Connected to " + m_server); | 405 | m_log.Info("[IRC]: Connected to " + m_server); |
410 | m_reader = new StreamReader(m_stream); | 406 | m_reader = new StreamReader(m_stream); |
411 | m_writer = new StreamWriter(m_stream); | 407 | m_writer = new StreamWriter(m_stream); |
412 | 408 | ||
@@ -422,7 +418,7 @@ namespace OpenSim.Region.Environment.Modules | |||
422 | m_writer.Flush(); | 418 | m_writer.Flush(); |
423 | m_writer.WriteLine("JOIN " + m_channel); | 419 | m_writer.WriteLine("JOIN " + m_channel); |
424 | m_writer.Flush(); | 420 | m_writer.Flush(); |
425 | m_log.Verbose("IRC", "Connection fully established"); | 421 | m_log.Info("[IRC]: Connection fully established"); |
426 | m_connected = true; | 422 | m_connected = true; |
427 | } | 423 | } |
428 | catch (Exception e) | 424 | catch (Exception e) |
@@ -475,16 +471,16 @@ namespace OpenSim.Region.Environment.Modules | |||
475 | m_writer.WriteLine(m_privmsgformat, m_channel, from, region, msg); | 471 | m_writer.WriteLine(m_privmsgformat, m_channel, from, region, msg); |
476 | } | 472 | } |
477 | m_writer.Flush(); | 473 | m_writer.Flush(); |
478 | m_log.Verbose("IRC", "PrivMsg " + from + " in " + region + " :" + msg); | 474 | m_log.Info("[IRC]: PrivMsg " + from + " in " + region + " :" + msg); |
479 | } | 475 | } |
480 | catch (IOException) | 476 | catch (IOException) |
481 | { | 477 | { |
482 | m_log.Error("IRC", "Disconnected from IRC server.(PrivMsg)"); | 478 | m_log.Error("[IRC]: Disconnected from IRC server.(PrivMsg)"); |
483 | Reconnect(); | 479 | Reconnect(); |
484 | } | 480 | } |
485 | catch (Exception ex) | 481 | catch (Exception ex) |
486 | { | 482 | { |
487 | m_log.Error("IRC", "PrivMsg exception trap:" + ex.ToString()); | 483 | m_log.Error("[IRC]: PrivMsg exception trap:" + ex.ToString()); |
488 | } | 484 | } |
489 | } | 485 | } |
490 | 486 | ||
@@ -493,7 +489,7 @@ namespace OpenSim.Region.Environment.Modules | |||
493 | //examines IRC commands and extracts any private messages | 489 | //examines IRC commands and extracts any private messages |
494 | // which will then be reboadcast in the Sim | 490 | // which will then be reboadcast in the Sim |
495 | 491 | ||
496 | m_log.Verbose("IRC", "ExtractMsg: " + input); | 492 | m_log.Info("[IRC]: ExtractMsg: " + input); |
497 | Dictionary<string, string> result = null; | 493 | Dictionary<string, string> result = null; |
498 | //string regex = @":(?<nick>\w*)!~(?<user>\S*) PRIVMSG (?<channel>\S+) :(?<msg>.*)"; | 494 | //string regex = @":(?<nick>\w*)!~(?<user>\S*) PRIVMSG (?<channel>\S+) :(?<msg>.*)"; |
499 | string regex = @":(?<nick>\w*)!(?<user>\S*) PRIVMSG (?<channel>\S+) :(?<msg>.*)"; | 495 | string regex = @":(?<nick>\w*)!(?<user>\S*) PRIVMSG (?<channel>\S+) :(?<msg>.*)"; |
@@ -510,10 +506,10 @@ namespace OpenSim.Region.Environment.Modules | |||
510 | } | 506 | } |
511 | else | 507 | else |
512 | { | 508 | { |
513 | m_log.Verbose("IRC", "Number of matches: " + matches.Count); | 509 | m_log.Info("[IRC]: Number of matches: " + matches.Count); |
514 | if (matches.Count > 0) | 510 | if (matches.Count > 0) |
515 | { | 511 | { |
516 | m_log.Verbose("IRC", "Number of groups: " + matches[0].Groups.Count); | 512 | m_log.Info("[IRC]: Number of groups: " + matches[0].Groups.Count); |
517 | } | 513 | } |
518 | } | 514 | } |
519 | return result; | 515 | return result; |
@@ -536,12 +532,12 @@ namespace OpenSim.Region.Environment.Modules | |||
536 | } | 532 | } |
537 | catch (IOException) | 533 | catch (IOException) |
538 | { | 534 | { |
539 | m_log.Error("IRC", "Disconnected from IRC server.(PingRun)"); | 535 | m_log.Error("[IRC]: Disconnected from IRC server.(PingRun)"); |
540 | Reconnect(); | 536 | Reconnect(); |
541 | } | 537 | } |
542 | catch (Exception ex) | 538 | catch (Exception ex) |
543 | { | 539 | { |
544 | m_log.Error("IRC", "PingRun exception trap:" + ex.ToString() + "\n" + ex.StackTrace); | 540 | m_log.Error("[IRC]: PingRun exception trap:" + ex.ToString() + "\n" + ex.StackTrace); |
545 | } | 541 | } |
546 | } | 542 | } |
547 | } | 543 | } |
@@ -552,29 +548,29 @@ namespace OpenSim.Region.Environment.Modules | |||
552 | LLVector3 pos = new LLVector3(128, 128, 20); | 548 | LLVector3 pos = new LLVector3(128, 128, 20); |
553 | while (true) | 549 | while (true) |
554 | { | 550 | { |
555 | try | 551 | try |
556 | { | ||
557 | while ((m_connected == true) && ((inputLine = m_reader.ReadLine()) != null)) | ||
558 | { | 552 | { |
553 | while ((m_connected == true) && ((inputLine = m_reader.ReadLine()) != null)) | ||
554 | { | ||
559 | // Console.WriteLine(inputLine); | 555 | // Console.WriteLine(inputLine); |
560 | if (inputLine.Contains(m_channel)) | 556 | if (inputLine.Contains(m_channel)) |
561 | { | 557 | { |
562 | Dictionary<string, string> data = ExtractMsg(inputLine); | 558 | Dictionary<string, string> data = ExtractMsg(inputLine); |
563 | // Any chat ??? | 559 | // Any chat ??? |
564 | if (data != null) | 560 | if (data != null) |
565 | { | 561 | { |
566 | foreach (Scene m_scene in m_scenes) | 562 | foreach (Scene m_scene in m_scenes) |
567 | { | 563 | { |
568 | m_scene.ForEachScenePresence(delegate(ScenePresence avatar) | 564 | m_scene.ForEachScenePresence(delegate(ScenePresence avatar) |
565 | { | ||
566 | if (!avatar.IsChildAgent) | ||
569 | { | 567 | { |
570 | if (!avatar.IsChildAgent) | 568 | avatar.ControllingClient.SendChatMessage( |
571 | { | 569 | Helpers.StringToField(data["msg"]), 255, |
572 | avatar.ControllingClient.SendChatMessage( | 570 | pos, data["nick"], |
573 | Helpers.StringToField(data["msg"]), 255, | 571 | LLUUID.Zero); |
574 | pos, data["nick"], | 572 | } |
575 | LLUUID.Zero); | 573 | }); |
576 | } | ||
577 | }); | ||
578 | } | 574 | } |
579 | 575 | ||
580 | 576 | ||
@@ -584,24 +580,24 @@ namespace OpenSim.Region.Environment.Modules | |||
584 | // Was an command from the IRC server | 580 | // Was an command from the IRC server |
585 | ProcessIRCCommand(inputLine); | 581 | ProcessIRCCommand(inputLine); |
586 | } | 582 | } |
587 | } | 583 | } |
588 | else | 584 | else |
589 | { | 585 | { |
590 | // Was an command from the IRC server | 586 | // Was an command from the IRC server |
591 | ProcessIRCCommand(inputLine); | 587 | ProcessIRCCommand(inputLine); |
592 | } | 588 | } |
593 | Thread.Sleep(150); | 589 | Thread.Sleep(150); |
594 | } | ||
595 | } | ||
596 | catch (IOException) | ||
597 | { | ||
598 | m_log.Error("IRC", "ListenerRun IOException. Disconnected from IRC server ??? (ListenerRun)"); | ||
599 | Reconnect(); | ||
600 | } | ||
601 | catch (Exception ex) | ||
602 | { | ||
603 | m_log.Error("IRC", "ListenerRun exception trap:" + ex.ToString()+"\n"+ex.StackTrace); | ||
604 | } | 590 | } |
591 | } | ||
592 | catch (IOException) | ||
593 | { | ||
594 | m_log.Error("[IRC]: ListenerRun IOException. Disconnected from IRC server ??? (ListenerRun)"); | ||
595 | Reconnect(); | ||
596 | } | ||
597 | catch (Exception ex) | ||
598 | { | ||
599 | m_log.Error("[IRC]: ListenerRun exception trap:" + ex.ToString() + "\n" + ex.StackTrace); | ||
600 | } | ||
605 | } | 601 | } |
606 | } | 602 | } |
607 | 603 | ||
@@ -626,27 +622,27 @@ namespace OpenSim.Region.Environment.Modules | |||
626 | } | 622 | } |
627 | catch (Exception ex) // IRC gate should not crash Sim | 623 | catch (Exception ex) // IRC gate should not crash Sim |
628 | { | 624 | { |
629 | m_log.Error("IRC", "BroadcastSim Exception Trap:" + ex.ToString() + "\n" + ex.StackTrace); | 625 | m_log.Error("[IRC]: BroadcastSim Exception Trap:" + ex.ToString() + "\n" + ex.StackTrace); |
630 | 626 | ||
631 | } | 627 | } |
632 | |||
633 | |||
634 | } | 628 | } |
629 | |||
635 | public enum ErrorReplies | 630 | public enum ErrorReplies |
636 | { | 631 | { |
637 | NotRegistered = 451, // ":You have not registered" | 632 | NotRegistered = 451, // ":You have not registered" |
638 | NicknameInUse = 433 // "<nick> :Nickname is already in use" | 633 | NicknameInUse = 433 // "<nick> :Nickname is already in use" |
639 | } | 634 | } |
635 | |||
640 | public enum Replies | 636 | public enum Replies |
641 | { | 637 | { |
642 | MotdStart = 375, // ":- <server> Message of the day - " | 638 | MotdStart = 375, // ":- <server> Message of the day - " |
643 | Motd = 372, // ":- <text>" | 639 | Motd = 372, // ":- <text>" |
644 | EndOfMotd = 376 // ":End of /MOTD command" | 640 | EndOfMotd = 376 // ":End of /MOTD command" |
645 | |||
646 | } | 641 | } |
642 | |||
647 | public void ProcessIRCCommand(string command) | 643 | public void ProcessIRCCommand(string command) |
648 | { | 644 | { |
649 | //m_log.Verbose("IRC", "ProcessIRCCommand:"+command); | 645 | //m_log.Info("[IRC]: ProcessIRCCommand:" + command); |
650 | 646 | ||
651 | string[] commArgs = new string[command.Split(' ').Length]; | 647 | string[] commArgs = new string[command.Split(' ').Length]; |
652 | string c_server = m_server; | 648 | string c_server = m_server; |
@@ -656,6 +652,7 @@ namespace OpenSim.Region.Environment.Modules | |||
656 | { | 652 | { |
657 | commArgs[0] = commArgs[0].Remove(0, 1); | 653 | commArgs[0] = commArgs[0].Remove(0, 1); |
658 | } | 654 | } |
655 | |||
659 | if (commArgs[1] == "002") | 656 | if (commArgs[1] == "002") |
660 | { | 657 | { |
661 | // fetch the correct servername | 658 | // fetch the correct servername |
@@ -668,7 +665,7 @@ namespace OpenSim.Region.Environment.Modules | |||
668 | 665 | ||
669 | if (commArgs[0] == "ERROR") | 666 | if (commArgs[0] == "ERROR") |
670 | { | 667 | { |
671 | m_log.Error("IRC", "IRC SERVER ERROR:" + command); | 668 | m_log.Error("[IRC]: IRC SERVER ERROR:" + command); |
672 | } | 669 | } |
673 | 670 | ||
674 | if (commArgs[0] == "PING") | 671 | if (commArgs[0] == "PING") |
@@ -695,7 +692,7 @@ namespace OpenSim.Region.Environment.Modules | |||
695 | case (int)ErrorReplies.NicknameInUse: | 692 | case (int)ErrorReplies.NicknameInUse: |
696 | // Gen a new name | 693 | // Gen a new name |
697 | m_nick = m_basenick + Util.RandomClass.Next(1, 99); | 694 | m_nick = m_basenick + Util.RandomClass.Next(1, 99); |
698 | m_log.Error("IRC", "IRC SERVER reports NicknameInUse, trying " + m_nick); | 695 | m_log.Error("[IRC]: IRC SERVER reports NicknameInUse, trying " + m_nick); |
699 | // Retry | 696 | // Retry |
700 | m_writer.WriteLine("NICK " + m_nick); | 697 | m_writer.WriteLine("NICK " + m_nick); |
701 | m_writer.Flush(); | 698 | m_writer.Flush(); |