类 RangeBroadcast
java.lang.Object
com.iohao.game.action.skeleton.kit.RangeBroadcast
- 所有已实现的接口:
RangeBroadcaster
范围内的广播,这个范围指的是,指定某些用户进行广播。
在执行广播前,开发者可以自定义业务逻辑,如 - 添加一些需要广播的用户 - 删除一些不需要接收广播的用户 - 可通过重写 logic、trick 方法来做一些额外扩展for example
// example - 1
new RangeBroadcast(flowContext)
// 需要广播的数据
.setResponseMessage(responseMessage)
// 添加需要接收广播的用户
.addUserId(1)
.addUserId(2)
.addUserId(List.of(3L, 4L, 5L))
// 排除一些用户,被排除的用户将不会接收到广播
.removeUserId(1)
.removeUserId(4)
// 执行广播,只有 2、3、5 可以接收到广播
.execute();
// example - 2
new RangeBroadcast(flowContext)
// 需要广播的数据(路由、业务数据)
.setResponseMessage(cmdInfo, StringValue.of("hello"))
// 添加需要接收广播的用户
.addUserId(1)
// 执行广播
.execute();
// example - 3
BrokerClientContext brokerClient = ...;
var aggregationContext = brokerClient.getCommunicationAggregationContext();
new RangeBroadcast(aggregationContext)
// 需要广播的数据(路由、业务数据)
.setResponseMessage(cmdInfo, StringValue.of("hello"))
// 添加需要接收广播的用户
.addUserId(1)
// 执行广播
.execute();
此外,还支持协议碎片及 List。关于协议碎片可阅读 协议碎片 - 文档
for example
// ------------ object ------------
// 广播单个对象
DemoBroadcastMessage message = new DemoBroadcastMessage();
message.msg = "helloBroadcast --- 1";
new RangeBroadcast(flowContext)
.setResponseMessage(cmdInfo, message);
List<DemoBroadcastMessage> messageList = List.of(message);
new RangeBroadcast(flowContext)
.setResponseMessageList(cmdInfo, messageList);
// ------------ int ------------
// 广播 int
int intValue = 1;
new RangeBroadcast(flowContext)
.setResponseMessage(cmdInfo, intValue);
// 广播 int list
List<Integer> intValueList = List.of(1, 2);
new RangeBroadcast(flowContext)
.setResponseMessageIntList(cmdInfo, intValueList);
// ------------ long ------------
// 广播 long
long longValue = 1L;
new RangeBroadcast(flowContext)
.setResponseMessage(cmdInfo, longValue);
// 广播 long list
List<Long> longValueList = List.of(1L, 2L);
new RangeBroadcast(flowContext)
.setResponseMessageLongList(cmdInfo, longValueList);
// ------------ String ------------
// 广播 String
String stringValue = "1";
new RangeBroadcast(flowContext)
.setResponseMessage(cmdInfo, stringValue);
// 广播 String list
List<String> stringValueList = List.of("1L", "2L");
new RangeBroadcast(flowContext)
.setResponseMessageStringList(cmdInfo, stringValueList);
// ------------ boolean ------------
// 广播 boolean
boolean boolValue = true;
new RangeBroadcast(flowContext)
.setResponseMessage(cmdInfo, boolValue);
// 广播 boolean list
List<Boolean> boolValueList = List.of(true, false);
new RangeBroadcast(flowContext)
.setResponseMessageBoolList(cmdInfo, boolValueList);
}
- 从以下版本开始:
- 21.8
- 作者:
- 渔民小镇
- 日期:
- 2024-04-23
-
构造器概要
构造器说明RangeBroadcast
(CommunicationAggregationContext aggregationContext) create by CommunicationAggregationContextRangeBroadcast
(FlowContext flowContext) create by CommunicationAggregationContext -
方法概要
修饰符和类型方法说明protected void
广播数据protected void
不执行推送数据的操作检测空用户,如果没有任何用户,广播(推送)时将触发异常final void
execute()
响应消息到远程端(用户、玩家)接收广播的用户protected void
logic()
在将数据推送到调用方之前,触发的方法setResponseMessage
(ResponseMessage responseMessage) 设置响应的广播数据 ResponseMessageprotected void
trick()
小把戏 (钩子方法),子类可以做些其他的事情;执行广播(推送)之前,触发的方法。从类继承的方法 java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
从接口继承的方法 com.iohao.game.action.skeleton.kit.RangeBroadcaster
addUserId, addUserId, addUserId, removeUserId, setResponseMessage, setResponseMessage, setResponseMessage, setResponseMessage, setResponseMessage, setResponseMessage, setResponseMessageBoolList, setResponseMessageIntList, setResponseMessageList, setResponseMessageLongList, setResponseMessageStringList
-
构造器详细资料
-
RangeBroadcast
create by CommunicationAggregationContext- 参数:
aggregationContext
- 网络通讯聚合接口
-
RangeBroadcast
create by CommunicationAggregationContext- 参数:
flowContext
- flowContext CommunicationAggregationContext
-
-
方法详细资料
-
enableEmptyUserCheck
检测空用户,如果没有任何用户,广播(推送)时将触发异常- 返回:
- this
-
listUserId
从接口复制的说明:RangeBroadcaster
接收广播的用户- 指定者:
listUserId
在接口中RangeBroadcaster
- 返回:
- 接收广播的用户
-
setResponseMessage
设置响应的广播数据 ResponseMessage- 指定者:
setResponseMessage
在接口中RangeBroadcaster
- 参数:
responseMessage
- ResponseMessage- 返回:
- this
-
execute
public final void execute()响应消息到远程端(用户、玩家)模板方法模式: 在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。 模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。 要点: - “模板方法”定义了算法的步骤,把这些步骤的实现延迟到子类。 - 模板方法模式为我们提供了一种代码复用的重要技巧。 - 模板方法的抽象类可以定义具体方法、抽象方法和钩子。 - 抽象方法由子类实现。 - 钩子是一种方法,它在抽象类中不做事,或者只做默认的事情,子类可以选择要不要去覆盖它。 - 为了防止子类改变模板方法中的算法,可以将模板方法声明为final。 - 好莱坞原则告诉我们,将决策权放在高层模块中,以便决定如何以及何时调用低层模块。 - 你将在真实世界代码中看到模板方法模式的许多变体,不要期待它们全都是一眼就可以被你一眼认出的。 - 策略模式和模板方法模式都封装算法,一个用组合,一个用继承。 - 工厂方法是模板方法的一种特殊版本。
- 指定者:
execute
在接口中RangeBroadcaster
-
logic
protected void logic()在将数据推送到调用方之前,触发的方法可以做一些逻辑,在逻辑中可以决定是否执行推送
// 不执行推送数据的操作 this.disableSend()
-
trick
protected void trick()小把戏 (钩子方法),子类可以做些其他的事情;执行广播(推送)之前,触发的方法。 -
broadcast
protected void broadcast()广播数据 -
disableSend
protected void disableSend()不执行推送数据的操作
-