Support for broadcasting with either a custom attention level

(for system messages), or a custom mode (for user broadcasts).


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@5693 542714f4-19e9-0310-aa3c-eee0fc999fb1
This commit is contained in:
Ray Greenwell
2009-03-25 21:23:32 +00:00
parent 52cedb5bdb
commit a419ed8455
6 changed files with 30 additions and 22 deletions
@@ -42,6 +42,7 @@ import com.threerings.presents.server.InvocationProvider;
import com.threerings.crowd.chat.client.ChatService.TellListener; import com.threerings.crowd.chat.client.ChatService.TellListener;
import com.threerings.crowd.chat.client.ChatService; import com.threerings.crowd.chat.client.ChatService;
import com.threerings.crowd.chat.data.ChatCodes; import com.threerings.crowd.chat.data.ChatCodes;
import com.threerings.crowd.chat.data.SystemMessage;
import com.threerings.crowd.chat.data.UserMessage; import com.threerings.crowd.chat.data.UserMessage;
import com.threerings.crowd.data.BodyObject; import com.threerings.crowd.data.BodyObject;
import com.threerings.crowd.data.CrowdCodes; import com.threerings.crowd.data.CrowdCodes;
@@ -81,7 +82,7 @@ public class ChatProvider
/** /**
* Requests that the supplied broadcast message be delivered on other servers. * Requests that the supplied broadcast message be delivered on other servers.
*/ */
void forwardBroadcast (Name from, String bundle, String msg, boolean attention); void forwardBroadcast (Name from, byte levelOrMode, String bundle, String msg);
} }
/** /**
@@ -180,21 +181,32 @@ public class ChatProvider
* false, deliver it only locally on this server. * false, deliver it only locally on this server.
*/ */
public void broadcast (Name from, String bundle, String msg, boolean attention, boolean forward) public void broadcast (Name from, String bundle, String msg, boolean attention, boolean forward)
{
byte levelOrMode = (from != null) ? ChatCodes.BROADCAST_MODE
: (attention ? SystemMessage.ATTENTION : SystemMessage.INFO);
broadcast(from, levelOrMode, bundle, msg, forward);
}
/**
* Broadcast with support for a customizable level or mode.
* @param levelOrMode if from is null, it's an attentionLevel, else it's a mode code.
*/
public void broadcast (Name from, byte levelOrMode, String bundle, String msg, boolean forward)
{ {
if (_broadcastObject != null) { if (_broadcastObject != null) {
broadcastTo(_broadcastObject, from, bundle, msg, attention); broadcastTo(_broadcastObject, from, levelOrMode, bundle, msg);
} else { } else {
for (Iterator<PlaceObject> iter = _plreg.enumeratePlaces(); iter.hasNext(); ) { for (Iterator<PlaceObject> iter = _plreg.enumeratePlaces(); iter.hasNext(); ) {
PlaceObject plobj = iter.next(); PlaceObject plobj = iter.next();
if (plobj.shouldBroadcast()) { if (plobj.shouldBroadcast()) {
broadcastTo(plobj, from, bundle, msg, attention); broadcastTo(plobj, from, levelOrMode, bundle, msg);
} }
} }
} }
if (forward && _chatForwarder != null) { if (forward && _chatForwarder != null) {
_chatForwarder.forwardBroadcast(from, bundle, msg, attention); _chatForwarder.forwardBroadcast(from, levelOrMode, bundle, msg);
} }
} }
@@ -262,18 +274,14 @@ public class ChatProvider
/** /**
* Direct a broadcast to the specified object. * Direct a broadcast to the specified object.
*/ */
protected void broadcastTo (DObject object, Name from, String bundle, String msg, protected void broadcastTo (
boolean attention) DObject object, Name from, byte levelOrMode, String bundle, String msg)
{ {
if (from == null) { if (from == null) {
if (attention) { SpeakUtil.sendSystem(object, bundle, msg, levelOrMode /* level */);
SpeakUtil.sendAttention(object, bundle, msg);
} else {
SpeakUtil.sendInfo(object, bundle, msg);
}
} else { } else {
SpeakUtil.sendSpeak(object, from, bundle, msg, ChatCodes.BROADCAST_MODE); SpeakUtil.sendSpeak(object, from, bundle, msg, levelOrMode /* mode */);
} }
} }
@@ -44,5 +44,5 @@ public interface CrowdPeerService extends InvocationService
/** /**
* Dispatches a broadcast message on this peer. * Dispatches a broadcast message on this peer.
*/ */
void deliverBroadcast (Client client, Name from, String bundle, String msg, boolean attention); void deliverBroadcast (Client client, Name from, byte levelOrMode, String bundle, String msg);
} }
@@ -43,10 +43,10 @@ public class CrowdPeerMarshaller extends InvocationMarshaller
public static final int DELIVER_BROADCAST = 1; public static final int DELIVER_BROADCAST = 1;
// from interface CrowdPeerService // from interface CrowdPeerService
public void deliverBroadcast (Client arg1, Name arg2, String arg3, String arg4, boolean arg5) public void deliverBroadcast (Client arg1, Name arg2, byte arg3, String arg4, String arg5)
{ {
sendRequest(arg1, DELIVER_BROADCAST, new Object[] { sendRequest(arg1, DELIVER_BROADCAST, new Object[] {
arg2, arg3, arg4, Boolean.valueOf(arg5) arg2, Byte.valueOf(arg3), arg4, arg5
}); });
} }
@@ -57,7 +57,7 @@ public class CrowdPeerDispatcher extends InvocationDispatcher<CrowdPeerMarshalle
switch (methodId) { switch (methodId) {
case CrowdPeerMarshaller.DELIVER_BROADCAST: case CrowdPeerMarshaller.DELIVER_BROADCAST:
((CrowdPeerProvider)provider).deliverBroadcast( ((CrowdPeerProvider)provider).deliverBroadcast(
source, (Name)args[0], (String)args[1], (String)args[2], ((Boolean)args[3]).booleanValue() source, (Name)args[0], ((Byte)args[1]).byteValue(), (String)args[2], (String)args[3]
); );
return; return;
@@ -69,11 +69,11 @@ public class CrowdPeerManager extends PeerManager
} }
// from interface CrowdPeerProvider // from interface CrowdPeerProvider
public void deliverBroadcast (ClientObject caller, Name from, String bundle, String msg, public void deliverBroadcast (
boolean attention) ClientObject caller, Name from, byte levelOrMode, String bundle, String msg)
{ {
// deliver the broadcast locally on this server // deliver the broadcast locally on this server
_chatprov.broadcast(from, bundle, msg, attention, false); _chatprov.broadcast(from, levelOrMode, bundle, msg, false);
} }
// from interface ChatProvider.ChatForwarder // from interface ChatProvider.ChatForwarder
@@ -103,12 +103,12 @@ public class CrowdPeerManager extends PeerManager
} }
// from interface ChatProvider.ChatForwarder // from interface ChatProvider.ChatForwarder
public void forwardBroadcast (Name from, String bundle, String msg, boolean attention) public void forwardBroadcast (Name from, byte levelOrMode, String bundle, String msg)
{ {
for (PeerNode peer : _peers.values()) { for (PeerNode peer : _peers.values()) {
if (peer.nodeobj != null) { if (peer.nodeobj != null) {
((CrowdNodeObject)peer.nodeobj).crowdPeerService.deliverBroadcast( ((CrowdNodeObject)peer.nodeobj).crowdPeerService.deliverBroadcast(
peer.getClient(), from, bundle, msg, attention); peer.getClient(), from, levelOrMode, bundle, msg);
} }
} }
} }
@@ -37,7 +37,7 @@ public interface CrowdPeerProvider extends InvocationProvider
/** /**
* Handles a {@link CrowdPeerService#deliverBroadcast} request. * Handles a {@link CrowdPeerService#deliverBroadcast} request.
*/ */
void deliverBroadcast (ClientObject caller, Name arg1, String arg2, String arg3, boolean arg4); void deliverBroadcast (ClientObject caller, Name arg1, byte arg2, String arg3, String arg4);
/** /**
* Handles a {@link CrowdPeerService#deliverTell} request. * Handles a {@link CrowdPeerService#deliverTell} request.