Package handling


package handling
封包處理核心與封包定義:三大伺服器共用的 Netty 處理器、收/送 opcode 列舉、伺服器型別。

本套件是整個網路層的樞紐,其下三個子套件 handling.loginhandling.channelhandling.cashshop 各自實作登入、遊戲頻道與商城/拍賣的封包處理邏輯, 而 handling.world 則提供跨伺服器的進程內協調層。

核心類別為 MapleServerHandler:單一個 Netty ChannelDuplexHandler 由三種伺服器型別共用,依 ServerType 與頻道號區分。入站時於 channelRead() 讀取 short opcode,線性掃描 RecvPacketOpcode 比對後交由 handlePacket() 大型 switch 分派到各子套件的 handler。

RecvPacketOpcodeSendPacketOpcode 是版本專屬(client 149.1)的封包代碼列舉, 兩者皆實作 WritableIntValueHolder(可變的 16 位元 opcode 值),其數值由 recv.propertiessend.properties 透過 ExternalCodeTableGetter 於啟動時注入; 缺少這些 properties 時所有 opcode 退化為 -2,伺服器將靜默丟棄全部入站封包。

其餘輔助型別:ServerType 列舉登入/世界/頻道/商城/拍賣五種邏輯伺服器; Buffstat 為 buff 狀態值與位元位置的介面;MapleServerHandlerMBean 為 JMX 管理介面。

  • Class
    Description
    buff 狀態項目的通用介面,定義數值位元與位元組位置的存取合約。
    從外部 Properties 檔案載入並填入 opcode 整數碼表的工具類別。
    三大伺服器共用的 Netty 封包分派器與連線生命週期處理器。
     
    定義伺服器可接收的所有用戶端封包操作碼(opcode)列舉,版本固定為 client 149.1。
    定義伺服器主動發送給用戶端的所有封包操作碼(opcode)列舉,版本固定為 client 149.1。
     
    可讀寫 short 整數值的通用持有者介面,供 opcode 列舉實作。