Refactored /tell idle auto-response; added support for configuring an
away/busy auto-response message. git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@2797 542714f4-19e9-0310-aa3c-eee0fc999fb1
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
//
|
||||
// $Id: ChatDirector.java,v 1.49 2003/09/16 21:26:15 ray Exp $
|
||||
// $Id: ChatDirector.java,v 1.50 2003/09/18 17:53:48 mdb Exp $
|
||||
|
||||
package com.threerings.crowd.chat.client;
|
||||
|
||||
@@ -363,17 +363,24 @@ public class ChatDirector extends BasicDirector
|
||||
|
||||
// create a listener that will report success or failure
|
||||
ChatService.TellListener listener = new ChatService.TellListener() {
|
||||
public void tellSucceeded () {
|
||||
public void tellSucceeded (long idletime, String awayMessage) {
|
||||
success(xlate(_bundle, MessageBundle.tcompose(
|
||||
"m.told_format", target, message)));
|
||||
}
|
||||
|
||||
public void tellSucceededIdle (long idletime) {
|
||||
String msg = MessageBundle.compose(
|
||||
"m.told_idle_format", MessageBundle.taint(target),
|
||||
MessageBundle.taint(message),
|
||||
TimeUtil.getTimeOrderString(idletime, TimeUtil.MINUTE));
|
||||
success(xlate(_bundle, msg));
|
||||
// if they have an away message, report that
|
||||
if (awayMessage != null) {
|
||||
String msg = MessageBundle.tcompose(
|
||||
"m.recipient_afk", target, awayMessage);
|
||||
displayFeedback(_bundle, msg);
|
||||
}
|
||||
|
||||
// if they are idle, report that
|
||||
if (idletime > 0L) {
|
||||
String msg = MessageBundle.compose(
|
||||
"m.recipient_idle", MessageBundle.taint(target),
|
||||
TimeUtil.getTimeOrderString(idletime, TimeUtil.MINUTE));
|
||||
displayFeedback(_bundle, msg);
|
||||
}
|
||||
}
|
||||
|
||||
protected void success (String feedback) {
|
||||
@@ -397,6 +404,17 @@ public class ChatDirector extends BasicDirector
|
||||
_cservice.tell(_ctx.getClient(), target, message, listener);
|
||||
}
|
||||
|
||||
/**
|
||||
* Configures a message that will be automatically reported to anyone
|
||||
* that sends a tell message to this client to indicate that we are
|
||||
* busy or away from the keyboard.
|
||||
*/
|
||||
public void setAwayMessage (String message)
|
||||
{
|
||||
// pass the buck right on along
|
||||
_cservice.away(_ctx.getClient(), message);
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds an additional object via which chat messages may arrive. The
|
||||
* chat director assumes the caller will be managing the subscription
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
//
|
||||
// $Id: ChatService.java,v 1.11 2003/06/03 21:41:33 ray Exp $
|
||||
// $Id: ChatService.java,v 1.12 2003/09/18 17:53:48 mdb Exp $
|
||||
|
||||
package com.threerings.crowd.chat.client;
|
||||
|
||||
@@ -20,17 +20,15 @@ public interface ChatService extends InvocationService
|
||||
*/
|
||||
public static interface TellListener extends InvocationListener
|
||||
{
|
||||
/**
|
||||
* Communicates the response to a {@link #tell} request.
|
||||
*/
|
||||
public void tellSucceeded ();
|
||||
|
||||
/**
|
||||
* Communicates the response to a {@link #tell} request.
|
||||
*
|
||||
* @param idletime, the number of ms the tellee has been idle.
|
||||
* @param idletime the number of ms the tellee has been idle or 0L
|
||||
* if they are not idle.
|
||||
* @param awayMessage the away message configured by the told
|
||||
* player or null if they have no away message.
|
||||
*/
|
||||
public void tellSucceededIdle (long idletime);
|
||||
public void tellSucceeded (long idleTime, String awayMessage);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -55,4 +53,10 @@ public interface ChatService extends InvocationService
|
||||
*/
|
||||
public void broadcast (Client client, String message,
|
||||
InvocationListener listener);
|
||||
|
||||
/**
|
||||
* Sets this client's away message. If the message is null or the
|
||||
* empty string, the away message will be cleared.
|
||||
*/
|
||||
public void away (Client client, String message);
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
//
|
||||
// $Id: ChatMarshaller.java,v 1.5 2003/06/03 21:41:33 ray Exp $
|
||||
// $Id: ChatMarshaller.java,v 1.6 2003/09/18 17:53:48 mdb Exp $
|
||||
|
||||
package com.threerings.crowd.chat.data;
|
||||
|
||||
@@ -29,23 +29,11 @@ public class ChatMarshaller extends InvocationMarshaller
|
||||
public static final int TELL_SUCCEEDED = 1;
|
||||
|
||||
// documentation inherited from interface
|
||||
public void tellSucceeded ()
|
||||
public void tellSucceeded (long arg1, String arg2)
|
||||
{
|
||||
omgr.postEvent(new InvocationResponseEvent(
|
||||
callerOid, requestId, TELL_SUCCEEDED,
|
||||
new Object[] { }));
|
||||
}
|
||||
|
||||
/** The method id used to dispatch {@link #tellSucceededIdle}
|
||||
* responses. */
|
||||
public static final int TELL_SUCCEEDED_IDLE = 2;
|
||||
|
||||
// documentation inherited from interface
|
||||
public void tellSucceededIdle (long arg1)
|
||||
{
|
||||
omgr.postEvent(new InvocationResponseEvent(
|
||||
callerOid, requestId, TELL_SUCCEEDED_IDLE,
|
||||
new Object[] { new Long(arg1) }));
|
||||
new Object[] { new Long(arg1), arg2 }));
|
||||
}
|
||||
|
||||
// documentation inherited
|
||||
@@ -54,12 +42,7 @@ public class ChatMarshaller extends InvocationMarshaller
|
||||
switch (methodId) {
|
||||
case TELL_SUCCEEDED:
|
||||
((TellListener)listener).tellSucceeded(
|
||||
);
|
||||
return;
|
||||
|
||||
case TELL_SUCCEEDED_IDLE:
|
||||
((TellListener)listener).tellSucceededIdle(
|
||||
((Long)args[0]).longValue());
|
||||
((Long)args[0]).longValue(), (String)args[1]);
|
||||
return;
|
||||
|
||||
default:
|
||||
@@ -94,4 +77,15 @@ public class ChatMarshaller extends InvocationMarshaller
|
||||
});
|
||||
}
|
||||
|
||||
/** The method id used to dispatch {@link #away} requests. */
|
||||
public static final int AWAY = 3;
|
||||
|
||||
// documentation inherited from interface
|
||||
public void away (Client arg1, String arg2)
|
||||
{
|
||||
sendRequest(arg1, AWAY, new Object[] {
|
||||
arg2
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
//
|
||||
// $Id: ChatDispatcher.java,v 1.5 2003/06/03 21:41:33 ray Exp $
|
||||
// $Id: ChatDispatcher.java,v 1.6 2003/09/18 17:53:48 mdb Exp $
|
||||
|
||||
package com.threerings.crowd.chat.server;
|
||||
|
||||
@@ -53,6 +53,13 @@ public class ChatDispatcher extends InvocationDispatcher
|
||||
);
|
||||
return;
|
||||
|
||||
case ChatMarshaller.AWAY:
|
||||
((ChatProvider)provider).away(
|
||||
source,
|
||||
(String)args[0]
|
||||
);
|
||||
return;
|
||||
|
||||
default:
|
||||
super.dispatchRequest(source, methodId, args);
|
||||
}
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
//
|
||||
// $Id: ChatProvider.java,v 1.24 2003/07/18 01:58:38 eric Exp $
|
||||
// $Id: ChatProvider.java,v 1.25 2003/09/18 17:53:48 mdb Exp $
|
||||
|
||||
package com.threerings.crowd.chat.server;
|
||||
|
||||
import java.util.Iterator;
|
||||
|
||||
import com.samskivert.util.StringUtil;
|
||||
import com.threerings.util.MessageBundle;
|
||||
import com.threerings.util.TimeUtil;
|
||||
|
||||
@@ -111,14 +112,15 @@ public class ChatProvider
|
||||
sendTellMessage(tobj, source.username, null, message);
|
||||
|
||||
// let the teller know it went ok
|
||||
long idle = 0L;
|
||||
if (tobj.status == OccupantInfo.IDLE) {
|
||||
listener.tellSucceededIdle(
|
||||
System.currentTimeMillis() - tobj.statusTime);
|
||||
|
||||
} else {
|
||||
// normal success
|
||||
listener.tellSucceeded();
|
||||
idle = System.currentTimeMillis() - tobj.statusTime;
|
||||
}
|
||||
String awayMessage = null;
|
||||
if (!StringUtil.blank(tobj.awayMessage)) {
|
||||
awayMessage = tobj.awayMessage;
|
||||
}
|
||||
listener.tellSucceeded(idle, awayMessage);
|
||||
|
||||
// do the autoresponse if needed
|
||||
if (_autoRespond != null) {
|
||||
@@ -150,6 +152,17 @@ public class ChatProvider
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Processes a {@link ClientService#away} request.
|
||||
*/
|
||||
public void away (ClientObject caller, String message)
|
||||
{
|
||||
BodyObject body = (BodyObject)caller;
|
||||
// we modify this field via an invocation service request because
|
||||
// a body object is not modifiable by the client
|
||||
body.setAwayMessage(message);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delivers a tell notification to the specified target player,
|
||||
* originating with the specified speaker.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
//
|
||||
// $Id: BodyObject.dobj,v 1.12 2003/06/14 00:55:40 mdb Exp $
|
||||
// $Id: BodyObject.dobj,v 1.13 2003/09/18 17:53:48 mdb Exp $
|
||||
|
||||
package com.threerings.crowd.data;
|
||||
|
||||
@@ -35,6 +35,12 @@ public class BodyObject extends ClientObject
|
||||
*/
|
||||
public transient long statusTime;
|
||||
|
||||
/**
|
||||
* If non-null, this contains a message to be auto-replied whenever
|
||||
* another user delivers a tell message to this user.
|
||||
*/
|
||||
public String awayMessage;
|
||||
|
||||
// documentation inherited
|
||||
public void applyToListeners (ListenerOp op)
|
||||
{
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
//
|
||||
// $Id: BodyObject.java,v 1.7 2003/06/14 00:55:40 mdb Exp $
|
||||
// $Id: BodyObject.java,v 1.8 2003/09/18 17:53:48 mdb Exp $
|
||||
|
||||
package com.threerings.crowd.data;
|
||||
|
||||
@@ -22,6 +22,9 @@ public class BodyObject extends ClientObject
|
||||
/** The field name of the <code>status</code> field. */
|
||||
public static final String STATUS = "status";
|
||||
|
||||
/** The field name of the <code>awayMessage</code> field. */
|
||||
public static final String AWAY_MESSAGE = "awayMessage";
|
||||
|
||||
/**
|
||||
* The username associated with this body object.
|
||||
*/
|
||||
@@ -44,6 +47,12 @@ public class BodyObject extends ClientObject
|
||||
*/
|
||||
public transient long statusTime;
|
||||
|
||||
/**
|
||||
* If non-null, this contains a message to be auto-replied whenever
|
||||
* another user delivers a tell message to this user.
|
||||
*/
|
||||
public String awayMessage;
|
||||
|
||||
// documentation inherited
|
||||
public void applyToListeners (ListenerOp op)
|
||||
{
|
||||
@@ -102,4 +111,18 @@ public class BodyObject extends ClientObject
|
||||
requestAttributeChange(STATUS, new Byte(status));
|
||||
this.status = status;
|
||||
}
|
||||
|
||||
/**
|
||||
* Requests that the <code>awayMessage</code> field be set to the specified
|
||||
* value. The local value will be updated immediately and an event
|
||||
* will be propagated through the system to notify all listeners that
|
||||
* the attribute did change. Proxied copies of this object (on
|
||||
* clients) will apply the value change when they received the
|
||||
* attribute changed notification.
|
||||
*/
|
||||
public void setAwayMessage (String awayMessage)
|
||||
{
|
||||
requestAttributeChange(AWAY_MESSAGE, awayMessage);
|
||||
this.awayMessage = awayMessage;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user