diff --git a/src/java/com/threerings/crowd/chat/client/ChatDecoder.java b/src/java/com/threerings/crowd/chat/client/ChatDecoder.java deleted file mode 100644 index c9d536aa0..000000000 --- a/src/java/com/threerings/crowd/chat/client/ChatDecoder.java +++ /dev/null @@ -1,56 +0,0 @@ -// -// $Id: ChatDecoder.java,v 1.2 2002/08/20 19:38:13 mdb Exp $ - -package com.threerings.crowd.chat; - -import com.threerings.crowd.chat.ChatReceiver; -import com.threerings.presents.client.InvocationDecoder; - -/** - * Dispatches calls to a {@link ChatReceiver} instance. - * - *

Generated from - * $Id: ChatDecoder.java,v 1.2 2002/08/20 19:38:13 mdb Exp $ - * - */ -public class ChatDecoder extends InvocationDecoder -{ - /** The generated hash code used to identify this receiver class. */ - public static final String RECEIVER_CODE = "50d26fa68e407846184dc06b78db3e1d"; - - /** The method id used to dispatch {@link ChatReceiver#receivedTell} - * notifications. */ - public static final int RECEIVED_TELL = 1; - - /** - * Creates a decoder that may be registered to dispatch invocation - * service notifications to the specified receiver. - */ - public ChatDecoder (ChatReceiver receiver) - { - this.receiver = receiver; - } - - // documentation inherited - public String getReceiverCode () - { - return RECEIVER_CODE; - } - - // documentation inherited - public void dispatchNotification (int methodId, Object[] args) - { - switch (methodId) { - case RECEIVED_TELL: - ((ChatReceiver)receiver).receivedTell( - (String)args[0], (String)args[1], (String)args[2] - ); - return; - - default: - super.dispatchNotification(methodId, args); - } - } - - // Generated on 12:36:59 08/20/02. -} diff --git a/src/java/com/threerings/crowd/chat/client/ChatDirector.java b/src/java/com/threerings/crowd/chat/client/ChatDirector.java index 2ab060766..86a2ad479 100644 --- a/src/java/com/threerings/crowd/chat/client/ChatDirector.java +++ b/src/java/com/threerings/crowd/chat/client/ChatDirector.java @@ -1,7 +1,7 @@ // -// $Id: ChatDirector.java,v 1.43 2003/01/21 01:08:36 mdb Exp $ +// $Id: ChatDirector.java,v 1.44 2003/06/03 21:41:33 ray Exp $ -package com.threerings.crowd.chat; +package com.threerings.crowd.chat.client; import java.util.Iterator; import java.util.LinkedList; @@ -11,6 +11,7 @@ import com.samskivert.util.ObserverList; import com.threerings.presents.client.BasicDirector; import com.threerings.presents.client.Client; +import com.threerings.presents.data.ClientObject; import com.threerings.presents.dobj.DObject; import com.threerings.presents.dobj.MessageEvent; import com.threerings.presents.dobj.MessageListener; @@ -24,13 +25,20 @@ import com.threerings.crowd.client.LocationObserver; import com.threerings.crowd.data.PlaceObject; import com.threerings.crowd.util.CrowdContext; +import com.threerings.crowd.chat.data.ChatCodes; +import com.threerings.crowd.chat.data.ChatMessage; +import com.threerings.crowd.chat.data.FeedbackMessage; +import com.threerings.crowd.chat.data.SystemMessage; +import com.threerings.crowd.chat.data.TellFeedbackMessage; +import com.threerings.crowd.chat.data.UserMessage; + /** * The chat director is the client side coordinator of all chat related * services. It handles both place constrained chat as well as direct * messaging. */ public class ChatDirector extends BasicDirector - implements ChatCodes, LocationObserver, MessageListener, ChatReceiver + implements ChatCodes, LocationObserver, MessageListener { /** * An interface to receive information about the {@link #MAX_CHATTERS} @@ -71,10 +79,6 @@ public class ChatDirector extends BasicDirector _msgmgr = msgmgr; _bundle = bundle; - // register for chat notifications - _ctx.getClient().getInvocationDirector().registerReceiver( - new ChatDecoder(this)); - // register ourselves as a location observer _ctx.getLocationDirector().addLocationObserver(this); } @@ -234,7 +238,9 @@ public class ChatDirector extends BasicDirector public void displaySystemMessage ( String bundle, String message, String localtype) { - dispatchMessage(new SystemMessage(xlate(bundle, message), localtype)); + SystemMessage msg = new SystemMessage(); + msg.setClientInfo(xlate(bundle, message), localtype); + dispatchMessage(msg); } /** @@ -259,7 +265,9 @@ public class ChatDirector extends BasicDirector public void displayFeedbackMessage (String bundle, String message, String localtype) { - dispatchMessage(new FeedbackMessage(xlate(bundle, message), localtype)); + FeedbackMessage msg = new FeedbackMessage(); + msg.setClientInfo(xlate(bundle, message), localtype); + dispatchMessage(msg); } /** @@ -322,7 +330,7 @@ public class ChatDirector extends BasicDirector public void requestBroadcast (String message) { _cservice.broadcast( - _ctx.getClient(), message, new ChatService.InvocationListener () { + _ctx.getClient(), message, new ChatService.InvocationListener() { public void requestFailed (String reason) { displayFeedbackMessage( _bundle, MessageBundle.compose( @@ -351,19 +359,18 @@ public class ChatDirector extends BasicDirector // create a listener that will report success or failure ChatService.TellListener listener = new ChatService.TellListener() { public void tellSucceeded () { - String msg = MessageBundle.tcompose( - "m.told_format", target, message); - displayFeedbackMessage(_bundle, msg); + dispatchMessage(new TellFeedbackMessage( + xlate(_bundle, MessageBundle.tcompose( + "m.told_format", target, message)))); addChatter(target); } public void tellSucceededIdle (long idletime) { - String msg = MessageBundle.compose( + dispatchMessage(new TellFeedbackMessage( + xlate(_bundle, MessageBundle.compose( "m.told_idle_format", MessageBundle.taint(target), MessageBundle.taint(message), - TimeUtil.getTimeOrderString(idletime, TimeUtil.MINUTE)); - - displayFeedbackMessage(_bundle, msg); + TimeUtil.getTimeOrderString(idletime, TimeUtil.MINUTE))))); addChatter(target); } @@ -439,71 +446,31 @@ public class ChatDirector extends BasicDirector // documentation inherited public void messageReceived (MessageEvent event) { - String name = event.getName(); - if (name.equals(SPEAK_NOTIFICATION)) { - handleSpeakMessage( - getLocalType(event.getTargetOid()), event.getArgs()); + if (CHAT_NOTIFICATION.equals(event.getName())) { + ChatMessage msg = (ChatMessage) event.getArgs()[0]; + String localtype = getLocalType(event.getTargetOid()); - } else if (name.equals(SYSTEM_NOTIFICATION)) { - Object[] args = event.getArgs(); - displaySystemMessage((String)args[0], (String)args[1], - getLocalType(event.getTargetOid())); + // if the message came from a user, make sure we want to hear it + if (msg instanceof UserMessage) { + String speaker = ((UserMessage) msg).speaker; + if (isBlocked(speaker)) { + // ack! block that message + return; + + } else if (USER_CHAT_TYPE.equals(localtype)) { + // if it was a tell, add the speaker as a chatter + addChatter(speaker); + } + } + + // initialize the client-specific fields of the message + msg.setClientInfo(xlate(msg.bundle, msg.message), localtype); + + // and send it off! + dispatchMessage(msg); } } - // documentation inherited from interface - public void receivedTell (String speaker, String bundle, String message) - { - // ignore messages from blocked users - if (isBlocked(speaker)) { - return; - } - - // if the message need be translated, do so - if (bundle != null) { - message = xlate(bundle, message); - } - - UserMessage um = new UserMessage( - message, ChatCodes.TELL_CHAT_TYPE, speaker, ChatCodes.DEFAULT_MODE); - dispatchMessage(um); - addChatter(speaker); - } - - /** - * Called when a speak message is received on the place object or one - * of our auxiliary chat objects. - * - * @param type {@link ChatCodes#PLACE_CHAT_TYPE} if the message was - * received on the place object or the type associated with the - * auxiliary chat object on which the message was received. - * @param args the arguments provided with the speak notification. - */ - protected void handleSpeakMessage (String localtype, Object[] args) - { - String speaker = (String)args[0]; - // bail if the speaker is blocked - if (isBlocked(speaker)) { - return; - } - - String message; - byte mode; - - // determine whether this speak message originated from another - // client or from a server entity - if (args.length == 3) { - message = (String)args[1]; - mode = ((Byte) args[2]).byteValue(); - - } else { - message = xlate((String) args[1], (String) args[2]); - mode = ((Byte) args[3]).byteValue(); - } - - dispatchMessage(new UserMessage(message, localtype, speaker, mode)); - } - /** * Translates the specified message using the specified bundle. */ @@ -557,11 +524,24 @@ public class ChatDirector extends BasicDirector return _requestId++; } + // documentation inherited + public void clientDidLogon (Client client) + { + super.clientDidLogon(client); + + // listen on the client object for tells + addAuxiliarySource(_clobj = client.getClientObject(), USER_CHAT_TYPE); + } + // documentation inherited public void clientObjectDidChange (Client client) { super.clientObjectDidChange(client); + // change what we're listening to for tells + removeAuxiliarySource(_clobj); + addAuxiliarySource(_clobj = client.getClientObject(), USER_CHAT_TYPE); + clearDisplays(); } @@ -570,6 +550,10 @@ public class ChatDirector extends BasicDirector { super.clientDidLogoff(client); + // stop listening to it for tells + removeAuxiliarySource(_clobj); + _clobj = null; + clearDisplays(); // clear out the list of people we've chatted with @@ -622,6 +606,9 @@ public class ChatDirector extends BasicDirector protected boolean _valid; } + /** + * An observer op used to dispatch ChatMessages on the client. + */ protected static class DisplayMessageOp implements ObserverList.ObserverOp { public void setMessage (ChatMessage message) @@ -653,6 +640,9 @@ public class ChatDirector extends BasicDirector /** The place object that we currently occupy. */ protected PlaceObject _place; + /** The client object that we're listening to for tells. */ + protected ClientObject _clobj; + /** A list of registered chat displays. */ protected ObserverList _displays = new ObserverList(ObserverList.FAST_UNSAFE_NOTIFY); diff --git a/src/java/com/threerings/crowd/chat/client/ChatDisplay.java b/src/java/com/threerings/crowd/chat/client/ChatDisplay.java index a7287c872..a810002d9 100644 --- a/src/java/com/threerings/crowd/chat/client/ChatDisplay.java +++ b/src/java/com/threerings/crowd/chat/client/ChatDisplay.java @@ -1,7 +1,9 @@ // -// $Id: ChatDisplay.java,v 1.16 2002/11/08 07:28:23 ray Exp $ +// $Id: ChatDisplay.java,v 1.17 2003/06/03 21:41:33 ray Exp $ -package com.threerings.crowd.chat; +package com.threerings.crowd.chat.client; + +import com.threerings.crowd.chat.data.ChatMessage; /** * A chat display provides a means by which chat messages can be diff --git a/src/java/com/threerings/crowd/chat/client/ChatReceiver.java b/src/java/com/threerings/crowd/chat/client/ChatReceiver.java deleted file mode 100644 index ded6e474c..000000000 --- a/src/java/com/threerings/crowd/chat/client/ChatReceiver.java +++ /dev/null @@ -1,30 +0,0 @@ -// -// $Id: ChatReceiver.java,v 1.3 2002/08/14 19:07:49 mdb Exp $ - -package com.threerings.crowd.chat; - -import com.threerings.presents.client.InvocationReceiver; - -/** - * Defines, for the chat services, a set of notifications delivered - * asynchronously by the server to the client. - */ -public interface ChatReceiver extends InvocationReceiver -{ - /** - * Called when a tell message is received from another player on the - * server. - * - * @param speaker the username of the user from which this message - * originated. - * @param bundle if non-null, a bundle that should be used to - * translate the text of the tell message. This is generally only used - * when some server entity originates the tell message rather than - * another user. The server entity might then wish for its tell - * message to be translated into a language appropriate for the - * receiver. Such luxuries are not available for human to human - * conversation, alas. - * @param message the text of the tell message. - */ - public void receivedTell (String speaker, String bundle, String message); -} diff --git a/src/java/com/threerings/crowd/chat/client/ChatService.java b/src/java/com/threerings/crowd/chat/client/ChatService.java index 8824f6298..c88763e59 100644 --- a/src/java/com/threerings/crowd/chat/client/ChatService.java +++ b/src/java/com/threerings/crowd/chat/client/ChatService.java @@ -1,7 +1,7 @@ // -// $Id: ChatService.java,v 1.10 2002/10/31 23:27:16 mdb Exp $ +// $Id: ChatService.java,v 1.11 2003/06/03 21:41:33 ray Exp $ -package com.threerings.crowd.chat; +package com.threerings.crowd.chat.client; import com.threerings.presents.client.Client; import com.threerings.presents.client.InvocationService; diff --git a/src/java/com/threerings/crowd/chat/client/ChatValidator.java b/src/java/com/threerings/crowd/chat/client/ChatValidator.java index d6e2d93c0..fc6f70ed7 100644 --- a/src/java/com/threerings/crowd/chat/client/ChatValidator.java +++ b/src/java/com/threerings/crowd/chat/client/ChatValidator.java @@ -1,7 +1,7 @@ // -// $Id: ChatValidator.java,v 1.1 2002/06/19 23:12:48 ray Exp $ +// $Id: ChatValidator.java,v 1.2 2003/06/03 21:41:33 ray Exp $ -package com.threerings.crowd.chat; +package com.threerings.crowd.chat.client; /** * A chat validator validates chat messages before they are sent to the diff --git a/src/java/com/threerings/crowd/chat/client/MuteDirector.java b/src/java/com/threerings/crowd/chat/client/MuteDirector.java index aac568592..b709a16ed 100644 --- a/src/java/com/threerings/crowd/chat/client/MuteDirector.java +++ b/src/java/com/threerings/crowd/chat/client/MuteDirector.java @@ -1,7 +1,7 @@ // -// $Id: MuteDirector.java,v 1.7 2003/04/08 02:49:43 ray Exp $ +// $Id: MuteDirector.java,v 1.8 2003/06/03 21:41:33 ray Exp $ -package com.threerings.crowd.chat; +package com.threerings.crowd.chat.client; import java.util.HashSet; diff --git a/src/java/com/threerings/crowd/chat/client/SpeakService.java b/src/java/com/threerings/crowd/chat/client/SpeakService.java index 93aa30edf..0b72829fa 100644 --- a/src/java/com/threerings/crowd/chat/client/SpeakService.java +++ b/src/java/com/threerings/crowd/chat/client/SpeakService.java @@ -1,7 +1,7 @@ // -// $Id: SpeakService.java,v 1.1 2002/08/14 19:07:49 mdb Exp $ +// $Id: SpeakService.java,v 1.2 2003/06/03 21:41:33 ray Exp $ -package com.threerings.crowd.chat; +package com.threerings.crowd.chat.client; import com.threerings.presents.client.Client; import com.threerings.presents.client.InvocationService; diff --git a/src/java/com/threerings/crowd/chat/data/ChatCodes.java b/src/java/com/threerings/crowd/chat/data/ChatCodes.java index cec363291..e08b04ccd 100644 --- a/src/java/com/threerings/crowd/chat/data/ChatCodes.java +++ b/src/java/com/threerings/crowd/chat/data/ChatCodes.java @@ -1,7 +1,7 @@ // -// $Id: ChatCodes.java,v 1.15 2003/03/30 02:53:05 mdb Exp $ +// $Id: ChatCodes.java,v 1.16 2003/06/03 21:41:33 ray Exp $ -package com.threerings.crowd.chat; +package com.threerings.crowd.chat.data; import com.threerings.presents.data.InvocationCodes; @@ -10,6 +10,9 @@ import com.threerings.presents.data.InvocationCodes; */ public interface ChatCodes extends InvocationCodes { + /** The message identifier for a chat notification message. */ + public static final String CHAT_NOTIFICATION = "chat"; + /** The chat localtype code for chat messages delivered on the place * object currently occupied by the client. This is the only type of * chat message that will be delivered unless the chat director is @@ -17,14 +20,8 @@ public interface ChatCodes extends InvocationCodes * ChatDirector#addAuxiliarySource}. */ public static final String PLACE_CHAT_TYPE = "placeChat"; - /** The message identifier for a speak notification message. */ - public static final String SPEAK_NOTIFICATION = "spknot"; - - /** The message identifier for a system notification message. */ - public static final String SYSTEM_NOTIFICATION = "sysnot"; - - /** The chat localtype for tells. */ - public static final String TELL_CHAT_TYPE = "tellChat"; + /** The chat localtype for messages received on the user object. */ + public static final String USER_CHAT_TYPE = "userChat"; /** The default mode used by {@link SpeakService#speak} requests. */ public static final byte DEFAULT_MODE = 0; diff --git a/src/java/com/threerings/crowd/chat/data/ChatMarshaller.java b/src/java/com/threerings/crowd/chat/data/ChatMarshaller.java index e25be1445..bb9fc872b 100644 --- a/src/java/com/threerings/crowd/chat/data/ChatMarshaller.java +++ b/src/java/com/threerings/crowd/chat/data/ChatMarshaller.java @@ -1,10 +1,10 @@ // -// $Id: ChatMarshaller.java,v 1.4 2002/10/31 23:27:16 mdb Exp $ +// $Id: ChatMarshaller.java,v 1.5 2003/06/03 21:41:33 ray Exp $ -package com.threerings.crowd.chat; +package com.threerings.crowd.chat.data; -import com.threerings.crowd.chat.ChatService; -import com.threerings.crowd.chat.ChatService.TellListener; +import com.threerings.crowd.chat.client.ChatService; +import com.threerings.crowd.chat.client.ChatService.TellListener; import com.threerings.presents.client.Client; import com.threerings.presents.client.InvocationService.InvocationListener; import com.threerings.presents.data.InvocationMarshaller; @@ -94,5 +94,4 @@ public class ChatMarshaller extends InvocationMarshaller }); } - // Generated on 13:40:31 10/31/02. } diff --git a/src/java/com/threerings/crowd/chat/data/ChatMessage.java b/src/java/com/threerings/crowd/chat/data/ChatMessage.java index 161e6d7d2..45ce3f941 100644 --- a/src/java/com/threerings/crowd/chat/data/ChatMessage.java +++ b/src/java/com/threerings/crowd/chat/data/ChatMessage.java @@ -1,32 +1,56 @@ // -// $Id: ChatMessage.java,v 1.3 2003/03/30 02:52:53 mdb Exp $ +// $Id: ChatMessage.java,v 1.4 2003/06/03 21:41:33 ray Exp $ -package com.threerings.crowd.chat; +package com.threerings.crowd.chat.data; import com.samskivert.util.StringUtil; +import com.threerings.io.Streamable; + /** * The abstract base class of all the client-side ChatMessage objects. */ public abstract class ChatMessage + implements Streamable { /** The actual text of the message. */ public String message; - /** The localtype of this chat, set to the type registered with an - * auxiliary source in the ChatDirector. */ - public String localtype; + /** The bundle to use when translating this message. */ + public String bundle; - /** The time that this message was created on the client. */ - public long timestamp; + /** The client side 'localtype' of this chat, set to the type + * registered with an auxiliary source in the ChatDirector. */ + public transient String localtype; + + /** The client time that this message was created. */ + public transient long timestamp; + + /** + * For all your unserialization needs. + */ + public ChatMessage () + { + } /** * Construct a ChatMessage. */ - public ChatMessage (String message, String localtype) + public ChatMessage (String message, String bundle) { this.message = message; + this.bundle = bundle; + } + + /** + * Once this message reaches the client, the information contained within + * is changed around a bit. + */ + public void setClientInfo (String msg, String localtype) + { + message = msg; this.localtype = localtype; + bundle = null; timestamp = System.currentTimeMillis(); } diff --git a/src/java/com/threerings/crowd/chat/data/FeedbackMessage.java b/src/java/com/threerings/crowd/chat/data/FeedbackMessage.java index 13180e3b5..3b3643910 100644 --- a/src/java/com/threerings/crowd/chat/data/FeedbackMessage.java +++ b/src/java/com/threerings/crowd/chat/data/FeedbackMessage.java @@ -1,7 +1,7 @@ // -// $Id: FeedbackMessage.java,v 1.1 2002/07/26 20:35:01 ray Exp $ +// $Id: FeedbackMessage.java,v 1.2 2003/06/03 21:41:33 ray Exp $ -package com.threerings.crowd.chat; +package com.threerings.crowd.chat.data; /** * A ChatMessage to indicate to the user that an action they took @@ -9,6 +9,10 @@ package com.threerings.crowd.chat; */ public class FeedbackMessage extends ChatMessage { + public FeedbackMessage () + { + } + /** * Construct a FeedbackMessage. */ diff --git a/src/java/com/threerings/crowd/chat/data/SpeakMarshaller.java b/src/java/com/threerings/crowd/chat/data/SpeakMarshaller.java index acd5af701..264618018 100644 --- a/src/java/com/threerings/crowd/chat/data/SpeakMarshaller.java +++ b/src/java/com/threerings/crowd/chat/data/SpeakMarshaller.java @@ -1,9 +1,9 @@ // -// $Id: SpeakMarshaller.java,v 1.2 2002/08/20 19:38:13 mdb Exp $ +// $Id: SpeakMarshaller.java,v 1.3 2003/06/03 21:41:33 ray Exp $ -package com.threerings.crowd.chat; +package com.threerings.crowd.chat.data; -import com.threerings.crowd.chat.SpeakService; +import com.threerings.crowd.chat.client.SpeakService; import com.threerings.presents.client.Client; import com.threerings.presents.data.InvocationMarshaller; import com.threerings.presents.dobj.InvocationResponseEvent; @@ -14,10 +14,6 @@ import com.threerings.presents.dobj.InvocationResponseEvent; * on the server. Also provides an implementation of the response listener * interfaces that marshall the response arguments and deliver them back * to the requesting client. - * - *

Generated from - * $Id: SpeakMarshaller.java,v 1.2 2002/08/20 19:38:13 mdb Exp $ - * */ public class SpeakMarshaller extends InvocationMarshaller implements SpeakService @@ -33,5 +29,4 @@ public class SpeakMarshaller extends InvocationMarshaller }); } - // Class file generated on 12:33:01 08/20/02. } diff --git a/src/java/com/threerings/crowd/chat/data/SystemMessage.java b/src/java/com/threerings/crowd/chat/data/SystemMessage.java index fc539b9d9..79b132128 100644 --- a/src/java/com/threerings/crowd/chat/data/SystemMessage.java +++ b/src/java/com/threerings/crowd/chat/data/SystemMessage.java @@ -1,7 +1,7 @@ // -// $Id: SystemMessage.java,v 1.1 2002/07/26 20:35:01 ray Exp $ +// $Id: SystemMessage.java,v 1.2 2003/06/03 21:41:33 ray Exp $ -package com.threerings.crowd.chat; +package com.threerings.crowd.chat.data; /** * A ChatMessage that represents a message that came from the server @@ -9,11 +9,15 @@ package com.threerings.crowd.chat; */ public class SystemMessage extends ChatMessage { + public SystemMessage () + { + } + /** * Construct a SystemMessage. */ - public SystemMessage (String message, String localtype) + public SystemMessage (String message, String bundle) { - super(message, localtype); + super(message, bundle); } } diff --git a/src/java/com/threerings/crowd/chat/data/UserMessage.java b/src/java/com/threerings/crowd/chat/data/UserMessage.java index a4fd4b6f8..a3dc57d34 100644 --- a/src/java/com/threerings/crowd/chat/data/UserMessage.java +++ b/src/java/com/threerings/crowd/chat/data/UserMessage.java @@ -1,7 +1,7 @@ // -// $Id: UserMessage.java,v 1.1 2002/07/26 20:35:01 ray Exp $ +// $Id: UserMessage.java,v 1.2 2003/06/03 21:41:33 ray Exp $ -package com.threerings.crowd.chat; +package com.threerings.crowd.chat.data; /** * A ChatMessage representing a message that came from another user. @@ -14,13 +14,20 @@ public class UserMessage extends ChatMessage /** The mode of the message. @see ChatCodes.DEFAULT_MODE */ public byte mode; + /** + * For unserialization. + */ + public UserMessage () + { + } + /** * Construct a user message. */ - public UserMessage (String message, String localtype, + public UserMessage (String message, String bundle, String speaker, byte mode) { - super(message, localtype); + super(message, bundle); this.speaker = speaker; this.mode = mode; } diff --git a/src/java/com/threerings/crowd/chat/server/ChatDispatcher.java b/src/java/com/threerings/crowd/chat/server/ChatDispatcher.java index 81c041741..a73d6111a 100644 --- a/src/java/com/threerings/crowd/chat/server/ChatDispatcher.java +++ b/src/java/com/threerings/crowd/chat/server/ChatDispatcher.java @@ -1,11 +1,11 @@ // -// $Id: ChatDispatcher.java,v 1.4 2002/10/31 23:27:16 mdb Exp $ +// $Id: ChatDispatcher.java,v 1.5 2003/06/03 21:41:33 ray Exp $ -package com.threerings.crowd.chat; +package com.threerings.crowd.chat.server; -import com.threerings.crowd.chat.ChatMarshaller; -import com.threerings.crowd.chat.ChatService; -import com.threerings.crowd.chat.ChatService.TellListener; +import com.threerings.crowd.chat.client.ChatService; +import com.threerings.crowd.chat.client.ChatService.TellListener; +import com.threerings.crowd.chat.data.ChatMarshaller; import com.threerings.presents.client.Client; import com.threerings.presents.client.InvocationService.InvocationListener; import com.threerings.presents.data.ClientObject; @@ -57,6 +57,4 @@ public class ChatDispatcher extends InvocationDispatcher super.dispatchRequest(source, methodId, args); } } - - // Generated on 13:40:31 10/31/02. } diff --git a/src/java/com/threerings/crowd/chat/server/ChatProvider.java b/src/java/com/threerings/crowd/chat/server/ChatProvider.java index 5af5149fe..4fc60ac58 100644 --- a/src/java/com/threerings/crowd/chat/server/ChatProvider.java +++ b/src/java/com/threerings/crowd/chat/server/ChatProvider.java @@ -1,7 +1,7 @@ // -// $Id: ChatProvider.java,v 1.18 2002/11/01 01:01:27 mdb Exp $ +// $Id: ChatProvider.java,v 1.19 2003/06/03 21:41:33 ray Exp $ -package com.threerings.crowd.chat; +package com.threerings.crowd.chat.server; import java.util.Iterator; @@ -23,7 +23,9 @@ import com.threerings.crowd.data.OccupantInfo; import com.threerings.crowd.data.PlaceObject; import com.threerings.crowd.server.CrowdServer; -import com.threerings.crowd.chat.ChatService.TellListener; +import com.threerings.crowd.chat.client.ChatService.TellListener; +import com.threerings.crowd.chat.data.ChatCodes; +import com.threerings.crowd.chat.data.UserMessage; /** * The chat provider handles the server side of the chat-related @@ -123,7 +125,8 @@ public class ChatProvider public static void sendTellMessage ( BodyObject target, String speaker, String bundle, String message) { - ChatSender.sendTell(target, speaker, bundle, message); + SpeakProvider.sendMessage(target, + new UserMessage(message, bundle, speaker, DEFAULT_MODE)); } /** The distributed object manager used by the chat services. */ diff --git a/src/java/com/threerings/crowd/chat/server/ChatSender.java b/src/java/com/threerings/crowd/chat/server/ChatSender.java deleted file mode 100644 index 847ee6be7..000000000 --- a/src/java/com/threerings/crowd/chat/server/ChatSender.java +++ /dev/null @@ -1,34 +0,0 @@ -// -// $Id: ChatSender.java,v 1.2 2002/08/20 19:38:13 mdb Exp $ - -package com.threerings.crowd.chat; - -import com.threerings.crowd.chat.ChatDecoder; -import com.threerings.crowd.chat.ChatReceiver; -import com.threerings.presents.data.ClientObject; -import com.threerings.presents.server.InvocationSender; - -/** - * Used to issue notifications to a {@link ChatReceiver} instance on a - * client. - * - *

Generated from - * $Id: ChatSender.java,v 1.2 2002/08/20 19:38:13 mdb Exp $ - * - */ -public class ChatSender extends InvocationSender -{ - /** - * Issues a notification that will result in a call to {@link - * ChatReceiver#receivedTell} on a client. - */ - public static void sendTell ( - ClientObject target, String arg1, String arg2, String arg3) - { - sendNotification( - target, ChatDecoder.RECEIVER_CODE, ChatDecoder.RECEIVED_TELL, - new Object[] { arg1, arg2, arg3 }); - } - - // Generated on 12:36:59 08/20/02. -} diff --git a/src/java/com/threerings/crowd/chat/server/SpeakDispatcher.java b/src/java/com/threerings/crowd/chat/server/SpeakDispatcher.java index e3e28a2d3..d3166569a 100644 --- a/src/java/com/threerings/crowd/chat/server/SpeakDispatcher.java +++ b/src/java/com/threerings/crowd/chat/server/SpeakDispatcher.java @@ -1,10 +1,10 @@ // -// $Id: SpeakDispatcher.java,v 1.2 2002/08/20 19:38:13 mdb Exp $ +// $Id: SpeakDispatcher.java,v 1.3 2003/06/03 21:41:33 ray Exp $ -package com.threerings.crowd.chat; +package com.threerings.crowd.chat.server; -import com.threerings.crowd.chat.SpeakMarshaller; -import com.threerings.crowd.chat.SpeakService; +import com.threerings.crowd.chat.client.SpeakService; +import com.threerings.crowd.chat.data.SpeakMarshaller; import com.threerings.presents.client.Client; import com.threerings.presents.data.ClientObject; import com.threerings.presents.data.InvocationMarshaller; @@ -13,10 +13,6 @@ import com.threerings.presents.server.InvocationException; /** * Dispatches requests to the {@link SpeakProvider}. - * - *

Generated from - * $Id: SpeakDispatcher.java,v 1.2 2002/08/20 19:38:13 mdb Exp $ - * */ public class SpeakDispatcher extends InvocationDispatcher { diff --git a/src/java/com/threerings/crowd/chat/server/SpeakProvider.java b/src/java/com/threerings/crowd/chat/server/SpeakProvider.java index ba3f6eacf..e6179ad5a 100644 --- a/src/java/com/threerings/crowd/chat/server/SpeakProvider.java +++ b/src/java/com/threerings/crowd/chat/server/SpeakProvider.java @@ -1,7 +1,7 @@ // -// $Id: SpeakProvider.java,v 1.4 2003/03/30 02:52:41 mdb Exp $ +// $Id: SpeakProvider.java,v 1.5 2003/06/03 21:41:33 ray Exp $ -package com.threerings.crowd.chat; +package com.threerings.crowd.chat.server; import com.samskivert.util.ObserverList; @@ -13,6 +13,11 @@ import com.threerings.presents.server.InvocationProvider; import com.threerings.crowd.Log; import com.threerings.crowd.data.BodyObject; +import com.threerings.crowd.chat.data.ChatCodes; +import com.threerings.crowd.chat.data.ChatMessage; +import com.threerings.crowd.chat.data.SystemMessage; +import com.threerings.crowd.chat.data.UserMessage; + /** * Provides the back-end of the chat speaking facilities. A server entity * can make "speech" available among the subscribers of a particular @@ -37,28 +42,6 @@ public class SpeakProvider public boolean isValidSpeaker (DObject speakObj, ClientObject speaker); } - /** - * An interface to be implemented by entities that would like to be - * notified of all speak messages. - */ - public static interface SpeakObserver - { - /** - * Called with the relevant details for every speak message sent - * by the speak provider. - */ - public void handleSpeakMessage (DObject speakObj, String speaker, - String bundle, String message, - byte mode); - - /** - * Called with the relevant details for every system speak message - * sent by the speak provider. - */ - public void handleSystemSpeakMessage ( - DObject speakObj, String bundle, String message); - } - /** * Creates a speak provider that will provide speech on the supplied * distributed object. @@ -80,7 +63,11 @@ public class SpeakProvider public void speak (ClientObject caller, String message, byte mode) { // ensure that the speaker is valid - if (!_validator.isValidSpeaker(_speakObj, caller)) { + // TODO: broadcast should be handled more like a system message + // rather than as a mode for a user message so that we don't + // have to do this validation here. Or not. + if ((mode == BROADCAST_MODE) || + !_validator.isValidSpeaker(_speakObj, caller)) { Log.warning("Refusing invalid speak request " + "[caller=" + caller.who() + ", speakObj=" + _speakObj.which() + @@ -93,24 +80,6 @@ public class SpeakProvider } } - /** - * Registers the supplied speak observer to be notified of all speak - * messages. - */ - public static void addSpeakObserver (SpeakObserver obs) - { - _observers.add(obs); - } - - /** - * Removes the supplied speak observer from the list of observers to - * be notified of all speak messages. - */ - public static void removeSpeakObserver (SpeakObserver obs) - { - _observers.remove(obs); - } - /** * Sends a speak notification to the specified place object * originating with the specified speaker (the speaker optionally @@ -152,17 +121,7 @@ public class SpeakProvider public static void sendSpeak (DObject speakObj, String speaker, String bundle, String message, byte mode) { - // pass the message along to all observers - notifyObservers(speakObj, speaker, bundle, message, mode); - - // post the message to the relevant object - Object[] outargs = null; - if (bundle == null) { - outargs = new Object[] { speaker, message, new Byte(mode) }; - } else { - outargs = new Object[] { speaker, bundle, message, new Byte(mode) }; - } - speakObj.postMessage(SPEAK_NOTIFICATION, outargs); + sendMessage(speakObj, new UserMessage(message, bundle, speaker, mode)); } /** @@ -180,60 +139,16 @@ public class SpeakProvider public static void sendSystemSpeak ( DObject speakObj, String bundle, String message) { - // pass the message along to all observers - notifyObservers(speakObj, null, bundle, message, - ChatCodes.DEFAULT_MODE); - - // post the message to the relevant object - speakObj.postMessage( - SYSTEM_NOTIFICATION, new Object[] { bundle, message }); + sendMessage(speakObj, new SystemMessage(message, bundle)); } /** - * Notifies all registered speak observers of the supplied speak - * message. + * Send the specified message on the specified object. */ - protected static void notifyObservers (DObject speakObj, String speaker, - String bundle, String message, - byte mode) + public static void sendMessage (DObject speakObj, ChatMessage msg) { - _spokenOp.setMessage(speakObj, speaker, bundle, message, mode); - _observers.apply(_spokenOp); - } - - protected static class SpokenOp implements ObserverList.ObserverOp - { - /** - * Sets the message information to be passed along to all {@link - * SpeakObserver}s. - */ - public void setMessage (DObject speakObj, String speaker, String bundle, - String message, byte mode) - { - _speakObj = speakObj; - _speaker = speaker; - _bundle = bundle; - _message = message; - _mode = mode; - } - - // documentation inherited - public boolean apply (Object observer) - { - if (_speaker == null) { - ((SpeakObserver)observer).handleSystemSpeakMessage( - _speakObj, _bundle, _message); - - } else { - ((SpeakObserver)observer).handleSpeakMessage( - _speakObj, _speaker, _bundle, _message, _mode); - } - return true; - } - - protected DObject _speakObj; - protected String _speaker, _bundle, _message; - protected byte _mode; + // post the message to the relevant object + speakObj.postMessage(CHAT_NOTIFICATION, new Object[] { msg }); } /** Our speech object. */ @@ -241,11 +156,4 @@ public class SpeakProvider /** The entity that will validate our speakers. */ protected SpeakerValidator _validator; - - /** The observers to be notified of all speak messages. */ - protected static ObserverList _observers = - new ObserverList(ObserverList.FAST_UNSAFE_NOTIFY); - - /** The operation used to notify observers of speak messages. */ - protected static SpokenOp _spokenOp = new SpokenOp(); } diff --git a/src/java/com/threerings/crowd/data/BodyMarshaller.java b/src/java/com/threerings/crowd/data/BodyMarshaller.java index b1b87236e..f14e8077a 100644 --- a/src/java/com/threerings/crowd/data/BodyMarshaller.java +++ b/src/java/com/threerings/crowd/data/BodyMarshaller.java @@ -1,5 +1,5 @@ // -// $Id: BodyMarshaller.java,v 1.1 2002/11/01 00:39:18 shaper Exp $ +// $Id: BodyMarshaller.java,v 1.2 2003/06/03 21:41:33 ray Exp $ package com.threerings.crowd.data; @@ -29,5 +29,4 @@ public class BodyMarshaller extends InvocationMarshaller }); } - // Generated on 15:58:33 10/31/02. } diff --git a/src/java/com/threerings/crowd/data/PlaceObject.java b/src/java/com/threerings/crowd/data/PlaceObject.java index 62dcc3c8e..320ff8a7a 100644 --- a/src/java/com/threerings/crowd/data/PlaceObject.java +++ b/src/java/com/threerings/crowd/data/PlaceObject.java @@ -1,5 +1,5 @@ // -// $Id: PlaceObject.java,v 1.11 2003/04/30 22:45:57 mdb Exp $ +// $Id: PlaceObject.java,v 1.12 2003/06/03 21:41:33 ray Exp $ package com.threerings.crowd.data; @@ -9,7 +9,7 @@ import com.threerings.presents.dobj.DObject; import com.threerings.presents.dobj.DSet; import com.threerings.presents.dobj.OidList; -import com.threerings.crowd.chat.SpeakMarshaller; +import com.threerings.crowd.chat.data.SpeakMarshaller; public class PlaceObject extends DObject { diff --git a/src/java/com/threerings/crowd/server/BodyDispatcher.java b/src/java/com/threerings/crowd/server/BodyDispatcher.java index ef33d721f..1e4b4e923 100644 --- a/src/java/com/threerings/crowd/server/BodyDispatcher.java +++ b/src/java/com/threerings/crowd/server/BodyDispatcher.java @@ -1,5 +1,5 @@ // -// $Id: BodyDispatcher.java,v 1.1 2002/11/01 00:39:18 shaper Exp $ +// $Id: BodyDispatcher.java,v 1.2 2003/06/03 21:41:33 ray Exp $ package com.threerings.crowd.server; @@ -48,6 +48,4 @@ public class BodyDispatcher extends InvocationDispatcher super.dispatchRequest(source, methodId, args); } } - - // Generated on 15:58:33 10/31/02. } diff --git a/src/java/com/threerings/crowd/server/CrowdServer.java b/src/java/com/threerings/crowd/server/CrowdServer.java index 706c70c90..bafa8c20b 100644 --- a/src/java/com/threerings/crowd/server/CrowdServer.java +++ b/src/java/com/threerings/crowd/server/CrowdServer.java @@ -1,5 +1,5 @@ // -// $Id: CrowdServer.java,v 1.17 2002/11/01 21:33:49 shaper Exp $ +// $Id: CrowdServer.java,v 1.18 2003/06/03 21:41:33 ray Exp $ package com.threerings.crowd.server; @@ -8,7 +8,7 @@ import java.util.Iterator; import com.threerings.presents.server.PresentsServer; import com.threerings.crowd.Log; -import com.threerings.crowd.chat.ChatProvider; +import com.threerings.crowd.chat.server.ChatProvider; import com.threerings.crowd.data.BodyObject; /** diff --git a/src/java/com/threerings/crowd/server/PlaceManager.java b/src/java/com/threerings/crowd/server/PlaceManager.java index 09974121a..5c35693ec 100644 --- a/src/java/com/threerings/crowd/server/PlaceManager.java +++ b/src/java/com/threerings/crowd/server/PlaceManager.java @@ -1,5 +1,5 @@ // -// $Id: PlaceManager.java,v 1.44 2003/03/25 01:12:29 mdb Exp $ +// $Id: PlaceManager.java,v 1.45 2003/06/03 21:41:33 ray Exp $ package com.threerings.crowd.server; @@ -34,9 +34,9 @@ import com.threerings.crowd.data.OccupantInfo; import com.threerings.crowd.data.PlaceConfig; import com.threerings.crowd.data.PlaceObject; -import com.threerings.crowd.chat.SpeakDispatcher; -import com.threerings.crowd.chat.SpeakMarshaller; -import com.threerings.crowd.chat.SpeakProvider; +import com.threerings.crowd.chat.data.SpeakMarshaller; +import com.threerings.crowd.chat.server.SpeakDispatcher; +import com.threerings.crowd.chat.server.SpeakProvider; /** * The place manager is the server-side entity that handles all diff --git a/src/java/com/threerings/micasa/client/ChatPanel.java b/src/java/com/threerings/micasa/client/ChatPanel.java index 2fca8124c..51a2e8b4a 100644 --- a/src/java/com/threerings/micasa/client/ChatPanel.java +++ b/src/java/com/threerings/micasa/client/ChatPanel.java @@ -1,5 +1,5 @@ // -// $Id: ChatPanel.java,v 1.22 2002/11/08 07:28:23 ray Exp $ +// $Id: ChatPanel.java,v 1.23 2003/06/03 21:41:33 ray Exp $ package com.threerings.micasa.client; @@ -34,13 +34,14 @@ import com.samskivert.swing.event.AncestorAdapter; import com.threerings.util.MessageBundle; -import com.threerings.crowd.chat.ChatCodes; -import com.threerings.crowd.chat.ChatDirector; -import com.threerings.crowd.chat.ChatDisplay; -import com.threerings.crowd.chat.ChatMessage; -import com.threerings.crowd.chat.FeedbackMessage; -import com.threerings.crowd.chat.SystemMessage; -import com.threerings.crowd.chat.UserMessage; +import com.threerings.crowd.chat.client.ChatDirector; +import com.threerings.crowd.chat.client.ChatDisplay; +import com.threerings.crowd.chat.data.ChatCodes; +import com.threerings.crowd.chat.data.ChatMessage; +import com.threerings.crowd.chat.data.FeedbackMessage; +import com.threerings.crowd.chat.data.SystemMessage; +import com.threerings.crowd.chat.data.UserMessage; + import com.threerings.crowd.client.OccupantObserver; import com.threerings.crowd.client.PlaceView; import com.threerings.crowd.data.OccupantInfo; @@ -231,7 +232,7 @@ public class ChatPanel { if (message instanceof UserMessage) { UserMessage msg = (UserMessage) message; - if (msg.localtype == ChatCodes.TELL_CHAT_TYPE) { + if (msg.localtype == ChatCodes.USER_CHAT_TYPE) { append("[" + msg.speaker + " whispers] ", _nameStyle); append(msg.message + "\n", _msgStyle); } else { diff --git a/src/java/com/threerings/micasa/lobby/LobbyManager.java b/src/java/com/threerings/micasa/lobby/LobbyManager.java index 617cd476f..656e5c3ed 100644 --- a/src/java/com/threerings/micasa/lobby/LobbyManager.java +++ b/src/java/com/threerings/micasa/lobby/LobbyManager.java @@ -1,12 +1,12 @@ // -// $Id: LobbyManager.java,v 1.5 2002/08/14 19:07:49 mdb Exp $ +// $Id: LobbyManager.java,v 1.6 2003/06/03 21:41:33 ray Exp $ package com.threerings.micasa.lobby; import java.util.Properties; import com.samskivert.util.StringUtil; -import com.threerings.crowd.chat.ChatCodes; +import com.threerings.crowd.chat.data.ChatCodes; import com.threerings.crowd.server.PlaceManager; import com.threerings.micasa.Log; diff --git a/src/java/com/threerings/parlor/game/GameManager.java b/src/java/com/threerings/parlor/game/GameManager.java index 3341088c7..112e361e9 100644 --- a/src/java/com/threerings/parlor/game/GameManager.java +++ b/src/java/com/threerings/parlor/game/GameManager.java @@ -1,5 +1,5 @@ // -// $Id: GameManager.java,v 1.63 2003/05/26 21:27:18 mdb Exp $ +// $Id: GameManager.java,v 1.64 2003/06/03 21:41:33 ray Exp $ package com.threerings.parlor.game; @@ -16,7 +16,7 @@ import com.threerings.presents.dobj.AttributeChangedEvent; import com.threerings.presents.dobj.MessageEvent; import com.threerings.presents.server.util.SafeInterval; -import com.threerings.crowd.chat.SpeakProvider; +import com.threerings.crowd.chat.server.SpeakProvider; import com.threerings.crowd.data.BodyObject; import com.threerings.crowd.data.PlaceObject; diff --git a/src/java/com/threerings/whirled/data/SceneMarshaller.java b/src/java/com/threerings/whirled/data/SceneMarshaller.java index 782173ded..ca43b6ca7 100644 --- a/src/java/com/threerings/whirled/data/SceneMarshaller.java +++ b/src/java/com/threerings/whirled/data/SceneMarshaller.java @@ -1,5 +1,5 @@ // -// $Id: SceneMarshaller.java,v 1.3 2003/02/12 07:23:31 mdb Exp $ +// $Id: SceneMarshaller.java,v 1.4 2003/06/03 21:41:33 ray Exp $ package com.threerings.whirled.data; @@ -100,5 +100,4 @@ public class SceneMarshaller extends InvocationMarshaller }); } - // Generated on 14:44:07 02/08/03. } diff --git a/src/java/com/threerings/whirled/server/SceneDispatcher.java b/src/java/com/threerings/whirled/server/SceneDispatcher.java index b511ed681..c43dfb514 100644 --- a/src/java/com/threerings/whirled/server/SceneDispatcher.java +++ b/src/java/com/threerings/whirled/server/SceneDispatcher.java @@ -1,5 +1,5 @@ // -// $Id: SceneDispatcher.java,v 1.3 2003/02/12 07:23:31 mdb Exp $ +// $Id: SceneDispatcher.java,v 1.4 2003/06/03 21:41:33 ray Exp $ package com.threerings.whirled.server; @@ -52,6 +52,4 @@ public class SceneDispatcher extends InvocationDispatcher super.dispatchRequest(source, methodId, args); } } - - // Generated on 14:44:07 02/08/03. } diff --git a/src/java/com/threerings/whirled/spot/client/SpotSceneDirector.java b/src/java/com/threerings/whirled/spot/client/SpotSceneDirector.java index cb5bc37c5..8eccfb397 100644 --- a/src/java/com/threerings/whirled/spot/client/SpotSceneDirector.java +++ b/src/java/com/threerings/whirled/spot/client/SpotSceneDirector.java @@ -1,5 +1,5 @@ // -// $Id: SpotSceneDirector.java,v 1.29 2003/05/06 00:21:59 mdb Exp $ +// $Id: SpotSceneDirector.java,v 1.30 2003/06/03 21:41:33 ray Exp $ package com.threerings.whirled.spot.client; @@ -18,8 +18,8 @@ import com.threerings.presents.dobj.DObjectManager; import com.threerings.presents.dobj.ObjectAccessException; import com.threerings.presents.dobj.Subscriber; -import com.threerings.crowd.chat.ChatCodes; -import com.threerings.crowd.chat.ChatDirector; +import com.threerings.crowd.chat.client.ChatDirector; +import com.threerings.crowd.chat.data.ChatCodes; import com.threerings.crowd.client.LocationAdapter; import com.threerings.crowd.client.LocationDirector; import com.threerings.crowd.data.PlaceObject; diff --git a/src/java/com/threerings/whirled/spot/data/SpotCodes.java b/src/java/com/threerings/whirled/spot/data/SpotCodes.java index a940c42b7..3738ae926 100644 --- a/src/java/com/threerings/whirled/spot/data/SpotCodes.java +++ b/src/java/com/threerings/whirled/spot/data/SpotCodes.java @@ -1,9 +1,9 @@ // -// $Id: SpotCodes.java,v 1.6 2003/03/27 16:45:30 mdb Exp $ +// $Id: SpotCodes.java,v 1.7 2003/06/03 21:41:33 ray Exp $ package com.threerings.whirled.spot.data; -import com.threerings.crowd.chat.ChatCodes; +import com.threerings.crowd.chat.data.ChatCodes; import com.threerings.whirled.data.SceneCodes; import com.threerings.whirled.spot.client.SpotSceneDirector; diff --git a/src/java/com/threerings/whirled/spot/server/SpotSceneManager.java b/src/java/com/threerings/whirled/spot/server/SpotSceneManager.java index 5b0d11191..e14214295 100644 --- a/src/java/com/threerings/whirled/spot/server/SpotSceneManager.java +++ b/src/java/com/threerings/whirled/spot/server/SpotSceneManager.java @@ -1,5 +1,5 @@ // -// $Id: SpotSceneManager.java,v 1.40 2003/04/17 19:17:07 mdb Exp $ +// $Id: SpotSceneManager.java,v 1.41 2003/06/03 21:41:33 ray Exp $ package com.threerings.whirled.spot.server; @@ -16,7 +16,7 @@ import com.threerings.presents.dobj.Subscriber; import com.threerings.presents.dobj.ObjectAccessException; import com.threerings.presents.server.InvocationException; -import com.threerings.crowd.chat.SpeakProvider; +import com.threerings.crowd.chat.server.SpeakProvider; import com.threerings.crowd.data.BodyObject; import com.threerings.crowd.data.OccupantInfo; import com.threerings.crowd.server.CrowdServer;