流光无际的包管理主要使用PacketResolver.

PacketResolver

PacketResolver 是任务系统网络层的核心组件, 负责统一管理数据包的注册、序列化、发送、接收与跨世界路由。所有任务系统相关的数据同步均通过此组件完成.

功能概述

  • 注册所有实现 IPacketIPacketHandler 的类型, 建立 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 不负责任务逻辑本身, 仅负责网络传输.