流光无际的包管理主要使用PacketResolver.
PacketResolver
PacketResolver 是任务系统网络层的核心组件, 负责统一管理数据包的注册、序列化、发送、接收与跨世界路由。所有任务系统相关的数据同步均通过此组件完成.
功能概述
- 注册所有实现
IPacket与IPacketHandler的类型, 建立 packetID 与类型的映射关系. - 将数据包序列化为字节流, 写入路由目标、来源玩家、packetID 以及数据内容.
- 根据路由目标决定发送方式, 包括当前世界内发送与跨世界路由.
- 在接收端解析数据包, 并调用对应的处理器执行逻辑.
- 在子世界服务器上识别跨世界路由包并转发, 可直接转发而不执行逻辑.
网络分层
PacketResolver 支持两种发送层级:
- Send
使用原版 TML 的发送方式, 数据包仅在当前世界内广播, 不跨世界. - Route
使用 TML + SubworldLibrary 进行跨世界传输, 支持主世界服务器、主世界客户端、子世界服务器、子世界客户端之间的路由.
路由目标 (RouteDestination)
Route 层使用以下路由目标:
MainServer- 所有非主世界服务器 (子服务器、主客户端、子客户端) 均使用此路由.
- 子世界服务器仅识别并直接转发, 不执行任务逻辑.
- 数据包最终到达主世界服务器, 由其验证并生效.
AllDownstream- 仅主世界服务器可发送.
- 广播至所有主客户端与子世界服务器, 子世界服务器执行后再转发给其子客户端.
发送行为
- Send(packet)
在当前世界内广播, 不跨世界. - Route(packet, destination)
根据RouteDestination进行跨世界路由.MainServer: 上行至主世界服务器.AllDownstream: 主世界服务器向所有终端广播.
接收与处理
- 解析路由目标、来源玩家、packetID 与数据内容.
- 若为子世界服务器且路由目标为跨世界, 则直接转发而不执行逻辑.
- 若为可执行节点, 则实例化对应
IPacket并调用所有绑定的IPacketHandler.
注意事项
- 子世界服务器永远不执行
MainServer路由包的逻辑, 只负责转发. - 主世界服务器是唯一可以发送
AllDownstream的节点. PacketResolver不负责任务逻辑本身, 仅负责网络传输.