From 77ef41cb42514b1164bf929b9a73894fd03539a8 Mon Sep 17 00:00:00 2001 From: Robert Zubeck Date: Fri, 10 Aug 2007 20:33:03 +0000 Subject: [PATCH] Separated out chat message listener functionality, and subsequent chat message processing. This enables subclasses of ChatDirector to listen for their own types of chat messages, but call the superclass to process them. git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4810 542714f4-19e9-0310-aa3c-eee0fc999fb1 --- .../crowd/chat/client/ChatDirector.as | 92 +++++++++-------- .../crowd/chat/client/ChatDirector.java | 98 ++++++++++--------- 2 files changed, 103 insertions(+), 87 deletions(-) diff --git a/src/as/com/threerings/crowd/chat/client/ChatDirector.as b/src/as/com/threerings/crowd/chat/client/ChatDirector.as index d2362d662..7b1b39c62 100644 --- a/src/as/com/threerings/crowd/chat/client/ChatDirector.as +++ b/src/as/com/threerings/crowd/chat/client/ChatDirector.as @@ -576,50 +576,10 @@ public class ChatDirector extends BasicDirector if (ChatCodes.CHAT_NOTIFICATION === event.getName()) { var msg :ChatMessage = (event.getArgs()[0] as ChatMessage); var localtype :String = getLocalType(event.getTargetOid()); - var autoResponse :String = null; - var speaker :Name = null; - var mode :int = -1; - - // figure out if the message was triggered by another user - if (msg is UserMessage) { - var umsg :UserMessage = (msg as UserMessage); - speaker = umsg.speaker; - mode = umsg.mode; - - } else if (msg is UserSystemMessage) { - speaker = (msg as UserSystemMessage).speaker; - } - - // if there was an originating speaker, see if we want to hear it - if (speaker != null) { - if ((msg.message = filter(msg.message, speaker, false)) == null) { - return; - } - - if (ChatCodes.USER_CHAT_TYPE == localtype && mode == ChatCodes.DEFAULT_MODE) { - // if it was a tell, add the speaker as a chatter - addChatter(speaker); - - // note whether or not we have an auto-response - var self :BodyObject = (_cctx.getClient().getClientObject() as BodyObject); - if (!StringUtil.isBlank(self.awayMessage)) { - autoResponse = self.awayMessage; - } - } - } - - // and send it off! - dispatchMessage(msg, localtype); - - // if we auto-responded, report as much - if (autoResponse != null) { - var amsg :String = MessageBundle.tcompose( - "m.auto_responded", speaker, autoResponse); - displayFeedback(_bundle, amsg); - } + processReceivedMessage(msg, localtype); } } - + // documentation inherited override public function clientDidLogon (event :ClientEvent) :void { @@ -667,6 +627,54 @@ public class ChatDirector extends BasicDirector _cservice = null; } + /** + * Processes and dispatches the specified chat message. + */ + protected function processReceivedMessage (msg :ChatMessage, localtype :String) :void + { + var autoResponse :String = null; + var speaker :Name = null; + var mode :int = -1; + + // figure out if the message was triggered by another user + if (msg is UserMessage) { + var umsg :UserMessage = (msg as UserMessage); + speaker = umsg.speaker; + mode = umsg.mode; + + } else if (msg is UserSystemMessage) { + speaker = (msg as UserSystemMessage).speaker; + } + + // if there was an originating speaker, see if we want to hear it + if (speaker != null) { + if ((msg.message = filter(msg.message, speaker, false)) == null) { + return; + } + + if (ChatCodes.USER_CHAT_TYPE == localtype && mode == ChatCodes.DEFAULT_MODE) { + // if it was a tell, add the speaker as a chatter + addChatter(speaker); + + // note whether or not we have an auto-response + var self :BodyObject = (_cctx.getClient().getClientObject() as BodyObject); + if (!StringUtil.isBlank(self.awayMessage)) { + autoResponse = self.awayMessage; + } + } + } + + // and send it off! + dispatchMessage(msg, localtype); + + // if we auto-responded, report as much + if (autoResponse != null) { + var amsg :String = MessageBundle.tcompose( + "m.auto_responded", speaker, autoResponse); + displayFeedback(_bundle, amsg); + } + } + /** * Dispatch a message to chat displays once it is fully prepared with the clientinfo. */ diff --git a/src/java/com/threerings/crowd/chat/client/ChatDirector.java b/src/java/com/threerings/crowd/chat/client/ChatDirector.java index c406eeff9..9d3c24061 100644 --- a/src/java/com/threerings/crowd/chat/client/ChatDirector.java +++ b/src/java/com/threerings/crowd/chat/client/ChatDirector.java @@ -648,51 +648,7 @@ public class ChatDirector extends BasicDirector if (CHAT_NOTIFICATION.equals(event.getName())) { ChatMessage msg = (ChatMessage) event.getArgs()[0]; String localtype = getLocalType(event.getTargetOid()); - String autoResponse = null; - Name speaker = null; - Name speakerDisplay = null; - byte mode = (byte) -1; - - // figure out if the message was triggered by another user - if (msg instanceof UserMessage) { - UserMessage umsg = (UserMessage)msg; - speaker = umsg.speaker; - speakerDisplay = umsg.getSpeakerDisplayName(); - mode = umsg.mode; - - } else if (msg instanceof UserSystemMessage) { - speaker = ((UserSystemMessage)msg).speaker; - speakerDisplay = speaker; - } - - // if there was an originating speaker, see if we want to hear it - if (speaker != null) { - if ((msg.message = filter(msg.message, speaker, false)) == null) { - return; - } - - if (USER_CHAT_TYPE.equals(localtype) && - mode == ChatCodes.DEFAULT_MODE) { - // if it was a tell, add the speaker as a chatter - addChatter(speaker); - - // note whether or not we have an auto-response - BodyObject self = (BodyObject)_ctx.getClient().getClientObject(); - if (!StringUtil.isBlank(self.awayMessage)) { - autoResponse = self.awayMessage; - } - } - } - - // and send it off! - dispatchMessage(msg, localtype); - - // if we auto-responded, report as much - if (autoResponse != null) { - String amsg = MessageBundle.tcompose( - "m.auto_responded", speakerDisplay, autoResponse); - displayFeedback(_bundle, amsg); - } + processReceivedMessage(msg, localtype); } } @@ -743,6 +699,58 @@ public class ChatDirector extends BasicDirector _cservice = null; } + /** + * Processes and dispatches the specified chat message. + */ + protected void processReceivedMessage (ChatMessage msg, String localtype) + { + String autoResponse = null; + Name speaker = null; + Name speakerDisplay = null; + byte mode = (byte) -1; + + // figure out if the message was triggered by another user + if (msg instanceof UserMessage) { + UserMessage umsg = (UserMessage)msg; + speaker = umsg.speaker; + speakerDisplay = umsg.getSpeakerDisplayName(); + mode = umsg.mode; + + } else if (msg instanceof UserSystemMessage) { + speaker = ((UserSystemMessage)msg).speaker; + speakerDisplay = speaker; + } + + // if there was an originating speaker, see if we want to hear it + if (speaker != null) { + if ((msg.message = filter(msg.message, speaker, false)) == null) { + return; + } + + if (USER_CHAT_TYPE.equals(localtype) && + mode == ChatCodes.DEFAULT_MODE) { + // if it was a tell, add the speaker as a chatter + addChatter(speaker); + + // note whether or not we have an auto-response + BodyObject self = (BodyObject)_ctx.getClient().getClientObject(); + if (!StringUtil.isBlank(self.awayMessage)) { + autoResponse = self.awayMessage; + } + } + } + + // and send it off! + dispatchMessage(msg, localtype); + + // if we auto-responded, report as much + if (autoResponse != null) { + String amsg = MessageBundle.tcompose( + "m.auto_responded", speakerDisplay, autoResponse); + displayFeedback(_bundle, amsg); + } + } + /** * Dispatch a message to chat displays once it is fully prepared with the clientinfo. */