Progress on chat support.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@155 542714f4-19e9-0310-aa3c-eee0fc999fb1
This commit is contained in:
@@ -0,0 +1,147 @@
|
|||||||
|
//
|
||||||
|
// $Id: ChatDirector.java,v 1.1 2001/08/02 23:46:47 mdb Exp $
|
||||||
|
|
||||||
|
package com.threerings.cocktail.party.chat;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import com.threerings.cocktail.cher.dobj.*;
|
||||||
|
|
||||||
|
import com.threerings.cocktail.party.Log;
|
||||||
|
import com.threerings.cocktail.party.client.LocationObserver;
|
||||||
|
import com.threerings.cocktail.party.data.PlaceObject;
|
||||||
|
import com.threerings.cocktail.party.util.PartyContext;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The chat manager is the client side coordinator of all chat related
|
||||||
|
* services. It handles both place constrainted chat as well as direct
|
||||||
|
* messaging.
|
||||||
|
*/
|
||||||
|
public class ChatManager
|
||||||
|
implements LocationObserver, Subscriber
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Creates a chat manager and initializes it with the supplied
|
||||||
|
* context. The chat manager will register itself as a location
|
||||||
|
* observer so that it can automatically process place constrained
|
||||||
|
* chat.
|
||||||
|
*/
|
||||||
|
public ChatManager (PartyContext ctx)
|
||||||
|
{
|
||||||
|
// keep the context around
|
||||||
|
_ctx = ctx;
|
||||||
|
|
||||||
|
// register ourselves as a location observer
|
||||||
|
_ctx.getLocationManager().addLocationObserver(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds the supplied chat display to the chat display list. It will
|
||||||
|
* subsequently be notified of incoming chat messages as well as tell
|
||||||
|
* responses.
|
||||||
|
*/
|
||||||
|
public void addChatDisplay (ChatDisplay display)
|
||||||
|
{
|
||||||
|
_displays.add(display);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes the specified chat display from the chat display list. The
|
||||||
|
* display will no longer receive chat related notifications.
|
||||||
|
*/
|
||||||
|
public void removeChatDisplay (ChatDisplay display)
|
||||||
|
{
|
||||||
|
_displays.remove(display);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Requests that a speak message be generated and delivered to all
|
||||||
|
* users that occupy the place object that we currently occupy.
|
||||||
|
*
|
||||||
|
* @param message the contents of the speak message.
|
||||||
|
*
|
||||||
|
* @return an id which can be used to coordinate this speak request
|
||||||
|
* with the response that will be delivered to all active chat
|
||||||
|
* displays when it arrives.
|
||||||
|
*/
|
||||||
|
public int requestSpeak (String message)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Requests that a tell message be delivered to the specified target
|
||||||
|
* user.
|
||||||
|
*
|
||||||
|
* @param target the username of the user to which the tell message
|
||||||
|
* should be delivered.
|
||||||
|
* @param message the contents of the tell message.
|
||||||
|
*
|
||||||
|
* @return an id which can be used to coordinate this request with the
|
||||||
|
* tell response that will be delivered to all active chat displays
|
||||||
|
* when it arrives.
|
||||||
|
*/
|
||||||
|
public int requestTell (String target, String message)
|
||||||
|
{
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean locationMayChange (int placeId)
|
||||||
|
{
|
||||||
|
// we accept all location change requests
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void locationDidChange (PlaceObject place)
|
||||||
|
{
|
||||||
|
if (_place != null) {
|
||||||
|
// unsubscribe from our old object
|
||||||
|
_place.removeSubscriber(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
// subscribe to the new object
|
||||||
|
_place = place;
|
||||||
|
_place.addSubscriber(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void locationChangeFailed (int placeId, String reason)
|
||||||
|
{
|
||||||
|
// nothing we care about
|
||||||
|
}
|
||||||
|
|
||||||
|
public void objectAvailable (DObject object)
|
||||||
|
{
|
||||||
|
// nothing to do here
|
||||||
|
}
|
||||||
|
|
||||||
|
public void requestFailed (int oid, ObjectAccessException cause)
|
||||||
|
{
|
||||||
|
// nothing to do here
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean handleEvent (DEvent event, DObject target)
|
||||||
|
{
|
||||||
|
// we only care about message events
|
||||||
|
if (!(event instanceof MessageEvent)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// and only those of proper name
|
||||||
|
MessageEvent mevt = (MessageEvent)event;
|
||||||
|
String name = mevt.getName();
|
||||||
|
if (name.equals(ChatService.SPEAK_NOTIFICATION)) {
|
||||||
|
handleSpeakMessage(mevt.getArgs());
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void handleSpeakMessage (Object[] args)
|
||||||
|
{
|
||||||
|
String speaker = (String)args[0];
|
||||||
|
String message = (String)args[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
protected PartyContext _ctx;
|
||||||
|
protected PlaceObject _place;
|
||||||
|
|
||||||
|
protected ArrayList _displays = new ArrayList();
|
||||||
|
}
|
||||||
@@ -0,0 +1,56 @@
|
|||||||
|
//
|
||||||
|
// $Id: ChatDisplay.java,v 1.1 2001/08/02 23:46:47 mdb Exp $
|
||||||
|
|
||||||
|
package com.threerings.cocktail.party.chat;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A chat display provides a means by which chat messages can be
|
||||||
|
* displayed. The chat display will be notified when chat messages of
|
||||||
|
* various sorts have been received by the client.
|
||||||
|
*/
|
||||||
|
public interface ChatDisplay
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Called to display a speak message. A speak message is one that is
|
||||||
|
* broadcast to all occupants of a particular place. A speak message
|
||||||
|
* originated by this client will result in a subsequent call to this
|
||||||
|
* method after the speak message is accepted by the server and
|
||||||
|
* broadcast to everyone in the place.
|
||||||
|
*
|
||||||
|
* @param speaker the username of the speaker.
|
||||||
|
* @param message the text of the message.
|
||||||
|
*/
|
||||||
|
public void displaySpeakMessage (String speaker, String message);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called to display a tell message. A tell message is one that is
|
||||||
|
* delivered directly from one user to another regardless of their
|
||||||
|
* location in the system.
|
||||||
|
*
|
||||||
|
* @param speaker the username of the speaker.
|
||||||
|
* @param message the text of the message.
|
||||||
|
*/
|
||||||
|
public void displayTellMessage (String speaker, String message);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called in response to a chat request (either speak or tell) that
|
||||||
|
* originated on this client. The request id supplied will match the
|
||||||
|
* one returned when the request was generated and the status will
|
||||||
|
* either indicate success (by being equal to
|
||||||
|
* <code>Codes.SUCCESS</code>) or failure (in which case it will
|
||||||
|
* contain a message failure code which can be converted into a
|
||||||
|
* displayable string).
|
||||||
|
*
|
||||||
|
* <p> A chat display should track outstanding chat requests so that
|
||||||
|
* it can properly handle the response when it arrives.
|
||||||
|
*
|
||||||
|
* @param reqid the request id of the request that resulted in this
|
||||||
|
* response.
|
||||||
|
* @param status the message code indicating whether the chat request
|
||||||
|
* was successful or not.
|
||||||
|
*
|
||||||
|
* @see ChatManager#requestSpeak
|
||||||
|
* @see ChatManager#requestTell
|
||||||
|
*/
|
||||||
|
public void handleResponse (int reqid, String status);
|
||||||
|
}
|
||||||
@@ -1,8 +1,24 @@
|
|||||||
//
|
//
|
||||||
// $Id: ChatService.java,v 1.1 2001/07/20 20:07:37 mdb Exp $
|
// $Id: ChatService.java,v 1.2 2001/08/02 23:46:47 mdb Exp $
|
||||||
|
|
||||||
package com.threerings.cocktail.party.chat;
|
package com.threerings.cocktail.party.chat;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The chat services provide a mechanism by which the client can broadcast
|
||||||
|
* chat messages to all clients that are subscribed to a particular place
|
||||||
|
* object or directly to a particular client. These services should not be
|
||||||
|
* used directly, but instead should be accessed via the chat manager.
|
||||||
|
*
|
||||||
|
* @see ChatManager
|
||||||
|
*/
|
||||||
public class ChatService
|
public class ChatService
|
||||||
{
|
{
|
||||||
|
/** The module name for the chat services. */
|
||||||
|
public static final String MODULE = "chat";
|
||||||
|
|
||||||
|
/** The message identifier for a speak request message. */
|
||||||
|
public static final String SPEAK_REQUEST = "spkreq";
|
||||||
|
|
||||||
|
/** The message identifier for a speak notification message. */
|
||||||
|
public static final String SPEAK_NOTIFICATION = "spknot";
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user