From a419ed845500687ab040c9ec2794293a49be280c Mon Sep 17 00:00:00 2001 From: Ray Greenwell Date: Wed, 25 Mar 2009 21:23:32 +0000 Subject: [PATCH] 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 --- .../crowd/chat/server/ChatProvider.java | 32 ++++++++++++------- .../crowd/peer/client/CrowdPeerService.java | 2 +- .../crowd/peer/data/CrowdPeerMarshaller.java | 4 +-- .../peer/server/CrowdPeerDispatcher.java | 2 +- .../crowd/peer/server/CrowdPeerManager.java | 10 +++--- .../crowd/peer/server/CrowdPeerProvider.java | 2 +- 6 files changed, 30 insertions(+), 22 deletions(-) diff --git a/src/java/com/threerings/crowd/chat/server/ChatProvider.java b/src/java/com/threerings/crowd/chat/server/ChatProvider.java index ee0a41d9d..b324e0110 100644 --- a/src/java/com/threerings/crowd/chat/server/ChatProvider.java +++ b/src/java/com/threerings/crowd/chat/server/ChatProvider.java @@ -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 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 */); } } diff --git a/src/java/com/threerings/crowd/peer/client/CrowdPeerService.java b/src/java/com/threerings/crowd/peer/client/CrowdPeerService.java index 97cfd2793..ea260b841 100644 --- a/src/java/com/threerings/crowd/peer/client/CrowdPeerService.java +++ b/src/java/com/threerings/crowd/peer/client/CrowdPeerService.java @@ -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); } diff --git a/src/java/com/threerings/crowd/peer/data/CrowdPeerMarshaller.java b/src/java/com/threerings/crowd/peer/data/CrowdPeerMarshaller.java index b5d180de1..f64f5eb4c 100644 --- a/src/java/com/threerings/crowd/peer/data/CrowdPeerMarshaller.java +++ b/src/java/com/threerings/crowd/peer/data/CrowdPeerMarshaller.java @@ -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 }); } diff --git a/src/java/com/threerings/crowd/peer/server/CrowdPeerDispatcher.java b/src/java/com/threerings/crowd/peer/server/CrowdPeerDispatcher.java index 347781015..dfcb5cc60 100644 --- a/src/java/com/threerings/crowd/peer/server/CrowdPeerDispatcher.java +++ b/src/java/com/threerings/crowd/peer/server/CrowdPeerDispatcher.java @@ -57,7 +57,7 @@ public class CrowdPeerDispatcher extends InvocationDispatcher