Class AbstractProtocolHandler<P,R>
java.lang.Object
io.github.theword.queqiao.core.protocol.AbstractProtocolHandler<P,R>
- Type Parameters:
P- 负载类型R- 返回类型
- Direct Known Subclasses:
BroadcastHandler,GetStatusHandler,SendActionBarHandler,SendCommandHandler,SendPrivateMessageHandler,SendRconCommandHandler,SendTitleHandler
协议处理器抽象基类
线程安全约束(重要):处理器实例由 ProtocolRouter 在构造阶段创建一次,
随后在多个连接、多个线程之间共享。因此实现必须无状态——
不得持有任何随请求变化的字段。
全部输入应来自方法参数,输出通过返回值表达。 违反该约束会引入静默的数据竞争:不同连接的请求会互相污染中间状态。
依赖来源:日志实现与平台 API 实现均由 ProtocolRouter 注入,
处理器不应访问 GlobalContext——
那会让协议层依赖全局状态、无法独立测试(连"成功路径"都测不到)。
- Since:
- 0.6.11
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected final HandleApiService平台 API 实现,由 ProtocolRouter 注入protected final org.slf4j.Logger日志实现,由 ProtocolRouter 注入 -
Constructor Summary
ConstructorsModifierConstructorDescriptionprotectedAbstractProtocolHandler(org.slf4j.Logger logger, HandleApiService handleApiService, Class<P> payloadType) -
Method Summary
Modifier and TypeMethodDescriptionfinal Rhandle(com.google.gson.JsonElement data) protected abstract RhandlePayload(P payload)
-
Field Details
-
logger
protected final org.slf4j.Logger logger日志实现,由 ProtocolRouter 注入 -
handleApiService
平台 API 实现,由 ProtocolRouter 注入允许为 null:运行时空对象(尚未
init)状态下平台实现尚未注入, 但该状态下不存在任何连接,因此处理器不可能被调用。
-
-
Constructor Details
-
AbstractProtocolHandler
protected AbstractProtocolHandler(org.slf4j.Logger logger, HandleApiService handleApiService, Class<P> payloadType)
-
-
Method Details
-
handle
- Throws:
ProtocolException
-
handlePayload
- Throws:
ProtocolException
-