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:
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user