The list servers are what allow people to know what JJ2 games are being played online, and allow them to create and join such games within JJ2.
First of all, there are a lot of different types of lists and servers mentioned here. To keep them from being ambiguous, these are the unique terms that will be used.
The purpose of the list server is to store, manage, and provide the list of currently hosted JJ2 game servers. When a user runs JJ2 and selects to join an internet game, the JJ2 program asks a list server for the current games in progress, and the list server then responds with the list of current JJ2 game servers. The JJ2 program then shows that list to the user so that they may select one of those game servers to join. Without the list server, nobody would know what games were running unless they were contact other people by different means.
When a users uses JJ2 to start an internet game, the JJ2 program (now the game server) first randomly selects one of the list server addresses listed in the user’s registry and tries to connect to it using port 10054. If it cannot connect to the first address it tries, it continues to randomly select list server address from the registry until it either manages to connect to one of the list servers, or it runs out of possible server list servers. Once the game manages to connect to a list server, the game server notifies the list server that it is running a game, and tells it such things as the host computer’s IP address, whether it’s a public or private server, the version of JJ2 (either 1.21 or 1.24), the mode of gameplay (e.g. battle, CTF, etc), the maximum number of players, and the name of the game server. The game server maintains this connection for as long as the game is running, and sends updates to the list server when the number of players currently in the game changes. Once the game is stopped, and the game server disconnects from the list server, the list server removes that game from the server list.
When a user goes to join an internet game in JJ2, JJ2 contacts the first list server it can from the addresses listed in the user’s registry on the remote port 10053. The list server then sends back the server list in binary mode and terminates the connection.
The JJ2 list servers were designed to be run from various server machines from all over the world, all backing each other up so that if one list server went down, then the server list would still be maintained on the other list servers. Each computer that runs the list server program has a list of the other list servers. They maintain communications with each other (using port 10056) to make sure they all have the same game servers listed. When a game server connects with one of the list servers, that list server simply notifies the other list servers to add the new game to their lists, and updates them regularly. When the original list server unlists a game, likewise it tells the other list servers to do so as well.
The original list server program was (assumed to be) made at Epic in conjunction with JJ2. According to its readme, Epic’s list server was “written in C, uses WinSock32 and occupies hardly any memory, processor time or bandwith.”
After Epic’s list server program had been found to have various bugs, and was now no longer supported by Epic, Nebula developed a new list server program. Nebula’s list server program is written in Java, and made to be complient with Epic’s list server as well as all versions of JJ2.
Later, DJazz wrote a list server in NodeJS. Though it served the community for a few years, it was somewhat unstable and required regular restarts.
j2lsnek is an open source list server, written by Stijn in Python. As of 2020, all active list servers run this list server software.
Used by game servers to accept incomming connections from other game clients. The list servers do not use this port for anything.
The JJ2 program connects to port 10053 on any list server to retrieve the list of game servers.
A game server connects to port 10054 on a list server to get the game listed. The game server uses this port to send information about the game being hosted, such as the game version, title, gameplay mode, and number of players to the list server. The game server stays connected to the list server so long as the game is hosted, updating the number of players when appropriate.
When someone joins/parts the game, the game server sends a two byte long packet to the List server in which the first byte is 0×00 and the second byte contains the number of connected players.
Port 10055 is used on the list servers to return the status and some stats of the list server. This information in returned in a human-readable text format immidiately upon connection, so anybody with a Telnet client can connect to a list server on port 10055 and see this information.
The list servers use port 10056 to communicate with each other to keep the list of game servers synchronized among all of the list servers in the list server network.
The list servers listen on 10057 and deliver a plain text version of the listed game servers immidiately upon connection. This port is commonly used by various Games in Progress scripts as the information returned is simple to parse, and contains more information than what is returned on port 10053. For this reason, JJ2+ no longer uses port 10053, and instead queries the list server on port 10057 to retrieve the server list.
[IP address]:[port] [location] [access] [game type] [version] [special version] [uptime] [player]/[max players] [server name]
The list servers use port 10058 for the “Message of the Day” feature used in GIP Scripts on websites. This is commonly used for passing on news and other important information to active online players. The Message of the Day is also displayed in-game when playing with JJ2+.
The list servers use port 10059 for the remote administration service. To use this service users are required to provide a username and password which is on the approved list. Once authenticated they may control many of the list servers features. Features include changing the hostname, blocking users from hosting games, delisting games and changing the “Message of the Day”.
All of these run j2lsnek.
Eat your lima beans, Johnny.