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;
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.data.BodyObject;
import com.threerings.crowd.data.CrowdCodes;
@@ -81,7 +82,7 @@ public class ChatProvider
/**
* 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.
*/
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) {
broadcastTo(_broadcastObject, from, bundle, msg, attention);
broadcastTo(_broadcastObject, from, levelOrMode, bundle, msg);
} else {
for (Iterator<PlaceObject> iter = _plreg.enumeratePlaces(); iter.hasNext(); ) {
PlaceObject plobj = iter.next();
if (plobj.shouldBroadcast()) {
broadcastTo(plobj, from, bundle, msg, attention);
broadcastTo(plobj, from, levelOrMode, bundle, msg);
}
}
}
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.
*/
protected void broadcastTo (DObject object, Name from, String bundle, String msg,
boolean attention)
protected void broadcastTo (
DObject object, Name from, byte levelOrMode, String bundle, String msg)
{
if (from == null) {
if (attention) {
SpeakUtil.sendAttention(object, bundle, msg);
} else {
SpeakUtil.sendInfo(object, bundle, msg);
}
SpeakUtil.sendSystem(object, bundle, msg, levelOrMode /* level */);
} 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.
*/
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;
// 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[] {
arg2, arg3, arg4, Boolean.valueOf(arg5)
arg2, Byte.valueOf(arg3), arg4, arg5
});
}
@@ -57,7 +57,7 @@ public class CrowdPeerDispatcher extends InvocationDispatcher<CrowdPeerMarshalle
switch (methodId) {
case CrowdPeerMarshaller.DELIVER_BROADCAST:
((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;
@@ -69,11 +69,11 @@ public class CrowdPeerManager extends PeerManager
}
// from interface CrowdPeerProvider
public void deliverBroadcast (ClientObject caller, Name from, String bundle, String msg,
boolean attention)
public void deliverBroadcast (
ClientObject caller, Name from, byte levelOrMode, String bundle, String msg)
{
// 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
@@ -103,12 +103,12 @@ public class CrowdPeerManager extends PeerManager
}
// 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()) {
if (peer.nodeobj != null) {
((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.
*/
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.