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
This commit is contained in:
Robert Zubeck
2007-08-10 20:33:03 +00:00
parent 2ac50f387a
commit 77ef41cb42
2 changed files with 103 additions and 87 deletions
@@ -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.
*/
@@ -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.
*/