Class World.Find

java.lang.Object
handling.world.World.Find
Enclosing class:
World

public static class World.Find extends Object
角色定位子系統:依角色 ID 或名稱查出所在頻道與角色實例。

維護兩張對照表(ID→頻道、名稱→頻道),由內部 ReentrantReadWriteLock 保護其讀寫;玩家登入/登出與換頻道時 透過 registerforceDeregister 更新。查詢方法在對應的頻道(或商城)角色儲存區中取出角色, 可能回傳 null(離線或查無此人)。findChannel 另含自我修復:若對照表指向已不存在的頻道會強制反註冊並回傳 -1

  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    static int
    findChannel(int id)
    依角色 ID 查出其所在頻道編號。
    static int
    依角色名稱查出其所在頻道編號。
    findChr(int st)
    依角色 ID 跨頻道查出角色實例。
    依角色名稱跨頻道查出角色實例。
    static void
    依角色 ID 強制移除其頻道對照(僅移除 ID→頻道一筆,名稱對照不動)。
    static void
    forceDeregister(int id, String name)
    同時依 ID 與名稱強制移除頻道對照(兩筆都清除)。
    static void
    依角色名稱強制移除其頻道對照(僅移除名稱→頻道一筆,ID 對照不動)。
    multiBuddyFind(int charIdFrom, int[] characterIds)
    一次定位多名角色(好友清單用)並回傳其「角色 ID/頻道」配對。
    static void
    register(int id, String name, int channel)
    登記某角色目前所在的頻道(同時建立 ID→頻道與名稱→頻道兩筆對照)。

    Methods inherited from class Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

    • Find

      public Find()
  • Method Details

    • register

      public static void register(int id, String name, int channel)
      登記某角色目前所在的頻道(同時建立 ID→頻道與名稱→頻道兩筆對照)。

      於寫鎖(lock.writeLock())保護下更新對照表;名稱以小寫存放以利不分大小寫查詢。

      Parameters:
      id - 角色 ID
      name - 角色名稱
      channel - 所在頻道編號(亦可能為商城等特殊負值)
    • forceDeregister

      public static void forceDeregister(int id)
      依角色 ID 強制移除其頻道對照(僅移除 ID→頻道一筆,名稱對照不動)。

      於寫鎖保護下移除。

      Parameters:
      id - 角色 ID
    • forceDeregister

      public static void forceDeregister(String id)
      依角色名稱強制移除其頻道對照(僅移除名稱→頻道一筆,ID 對照不動)。

      於寫鎖保護下移除;名稱以小寫比對。

      Parameters:
      id - 角色名稱
    • forceDeregister

      public static void forceDeregister(int id, String name)
      同時依 ID 與名稱強制移除頻道對照(兩筆都清除)。

      於寫鎖保護下移除;名稱以小寫比對。為角色完全離線時的標準反註冊路徑。

      Parameters:
      id - 角色 ID
      name - 角色名稱
    • findChannel

      public static int findChannel(int id)
      依角色 ID 查出其所在頻道編號。

      於讀鎖保護下查對照表。含自我修復:若查得的頻道非特殊值(-10-20)卻已無對應 ChannelServer, 會呼叫 forceDeregister(int) 清除該筆並回傳 -1(此處會升級為寫鎖)。

      Parameters:
      id - 角色 ID
      Returns:
      所在頻道編號(或商城等特殊負值 -10-20);查無或頻道已失效時為 -1
    • findChannel

      public static int findChannel(String st)
      依角色名稱查出其所在頻道編號。

      於讀鎖保護下查對照表(名稱不分大小寫)。含與 findChannel(int) 相同的自我修復:頻道已失效時清除該筆並回傳 -1

      Parameters:
      st - 角色名稱
      Returns:
      所在頻道編號(或商城等特殊負值 -10-20);查無或頻道已失效時為 -1
    • findChr

      public static MapleCharacter findChr(String st)
      依角色名稱跨頻道查出角色實例。

      於讀鎖保護下查名稱→頻道對照(不分大小寫);若對照存在但該頻道已無 ChannelServer,則改從 CashShopServer 的角色儲存區取出(玩家可能正在商城)。

      Parameters:
      st - 角色名稱
      Returns:
      對應的 MapleCharacter;查無此人時為 null(亦可能因頻道儲存區查無而為 null
    • findChr

      public static MapleCharacter findChr(int st)
      依角色 ID 跨頻道查出角色實例。

      於讀鎖保護下查 ID→頻道對照;若對照存在但該頻道已無 ChannelServer,則改從 CashShopServer 的角色儲存區取出(玩家可能正在商城)。

      Parameters:
      st - 角色 ID
      Returns:
      對應的 MapleCharacter;查無此人時為 null(亦可能因頻道儲存區查無而為 null
    • multiBuddyFind

      public static CharacterIdChannelPair[] multiBuddyFind(int charIdFrom, int[] characterIds)
      一次定位多名角色(好友清單用)並回傳其「角色 ID/頻道」配對。

      對每個 ID 呼叫 findChannel(int),只收錄頻道為正值(在一般遊戲頻道在線)者,結果依 CharacterIdChannelPair 的自然順序排序後回傳。

      Parameters:
      charIdFrom - 發起查詢的角色 ID(目前僅作語意標示,未參與過濾)
      characterIds - 欲查詢的角色 ID 陣列
      Returns:
      在線者的「ID/頻道」配對陣列(已排序);無人在線時為長度 0 的陣列(非 null