HeroEngine Forums
Welcome, Guest. Please login or Register for HeroCloud Account.

Author Topic: Printout of Lobby System Status  (Read 2310 times)

FI-ScottZ

  • General Accounts
  • *
  • Posts: 1407
    • View Profile
    • Forever Interactive, Inc.
Printout of Lobby System Status
« on: Jun 14, 13, 10:05:56 AM »

I have been working on the Lobby System for some days now, and to make the changes I make to the system more transparent, I wrote this method for the server $_LOBBY system node.
  • Create a server class.
  • Use the System Nodes Configuration GUI to glom it onto the server $_LOBBY system node.
  • Add the method below to that class methods script.
  • (Optional) Create a server command to call that method.

Code: [Select]
remote method EchoLobbySystem()
  where me is kindof _LobbySystem
    //First call the Control Instance:
    if not (me._IsLobbySystemControlInstance() or me._IsLobbySystemWorkerInstance())
      call area me._GetLobbySystemAreaID() instance 0 me.EchoLobbySystem()
      return
    .
   
    msg as String
   
    LLD as NodeRef of Class _LogicalLobbyDirectory
    LD as NodeRef of Class _LobbyDirectory
    lobby as NodeRef of Class _Lobby
    presenceLobby as NodeRef of Class _LogicalLobbyDirectoryPresenceLobby
    playerName as String
    LWL as NodeRef of Class _LightweightLobby

    //From the control instance, call each worker instance:
    if me._IsLobbySystemControlInstance()
      msg = "$RControl Instance$R LW Directories: "+me._lightweightLobbyDirectoryMap.length+"$R"
      foreach HWLDid in me._lightweightLobbyDirectoryMap
        msg += "  HW Lobby Directory ID: "+HWLDid+"$R"
        foreach LWLD in me._lightweightLobbyDirectoryMap[HWLDid]
          if LWLD != None
            msg += "   LW Dir ID: "+LWLD._lobbySystemEntityUniqueIdentifier+" _replicationGroupRef: "+LWLD._replicationGroupRef+"$R   Server Destinations:$R"
            //Cannot call LWLD._GetReplicationGroup() because LWLD is a proxy node (replicated here)
            //and _GetReplicationGroup is not labeled to work for proxied nodes.
          .
        .
      .
      msg += "$R LW Lobbies: "+me._lightweightLobbyMap.length+"$R"
      foreach LWLid in me._lightweightLobbyMap
        LWL = me._lightweightLobbyMap[LWLid]
        if LWL != None
          msg += "  LW Lobby ID: "+LWL._lobbySystemEntityUniqueIdentifier+" _replicationGroupRef: "+LWL._replicationGroupRef+"$R   Server Destinations:$R"
          //Cannot call LWL._GetReplicationGroup() because LWL is a proxy node (replicated here)
          //and _GetReplicationGroup is not labeled to work for proxied nodes.
        .
      .
      println(msg)
     
      //Call on each other instance:
      loop i from 1 to me._GetLobbySystemMaxWorkerInstances()
        call area me._GetLobbySystemAreaID() instance IntToId(i) me.EchoLobbySystem()
      .
      return
    .
   
    msg = "$RLobby System Instance: "+GetInstanceNumber()+"$R--------------------------------$RLogical Lobbies:$R"
   
   
    //Now we are on a worker instance.
    foreach LLDid in me._lobbySystemLogicalDirectoryMap
      LLD = me._lobbySystemLogicalDirectoryMap[LLDid]
     
      msg += "--"+LLD._lobbyDirectoryName+"["+LLD._lobbySystemEntityUniqueIdentifier+"]$R"
     
      //Presence Lobbies:
      msg += "   Presence Lobbies:$R"
      foreach lobbyID in LLD._logicalLobbyDirectoryPresenceLobbyIDMap
        presenceLobby = LLD._logicalLobbyDirectoryPresenceLobbyIDMap[lobbyID]
        msg += "    "+presenceLobby._lobbyName+"["+presenceLobby._lobbySystemEntityUniqueIdentifier+"]$R     occupants: "+presenceLobby._lobbyOccupants.length+"/"+presenceLobby._lobbyPlayerCapacity+"$R"
        foreach pnid in presenceLobby._logicalLobbyDirectoryPresenceLobbyPlayerNames
          playerName = presenceLobby._logicalLobbyDirectoryPresenceLobbyPlayerNames[pnid]
          msg += "      "+playerName+"["+pnid+"]$R"
        .
        msg += "    -----$R"
      .
     
      //Directories:
      msg += "   Directories ("+LLD._lobbyDirectoryMap.length+"):$R"
      foreach LDid in LLD._lobbyDirectoryMap
        LD = LLD._lobbyDirectoryMap[LDid]
        msg += "    "+LD._lobbyDirectoryName+"["+LD._lobbySystemEntityUniqueIdentifier+"]$R     lobbies ("+LD._lobbyDirectoryLobbyMap.length+"):$R"
        foreach Lid in LD._lobbyDirectoryLobbyMap
          lobby = LD._lobbyDirectoryLobbyMap[Lid]
          msg += "      "+lobby._lobbyName+"["+Lid+"]$R       occupants: "+lobby._lobbyOccupants.length+"/"+lobby._lobbyPlayerCapacity+"$R"
        .
      .

      //Lobby public (displayable) data:
      //TODO (?)
     
      msg += "***********************************$R"
    .
   
    println(msg)
  .
.

This is just something I wrote off the top of my head, and could probably be improved.  I have not tested it fully in all cases, particularly when players are in lobbies.

Feel free to use it.
Logged
Scott Zarnke
Lead Programmer, Visions of Zosimos
CTO, Forever Interactive, Inc.