JoinServer

JoinServer validates account credentials against SQL Server and coordinates player movement between GameServers. ConnectServer points clients at a GameServer; that GameServer asks JoinServer whether the account may log in.

Role#

  • Authenticates account and password against the MEMB_INFO table
  • Tracks which account is online and on which GameServer
  • Issues transfer auth codes used when a player warps to a different GameServer
  • Sends a periodic UDP heartbeat to ConnectServer so CS knows JS is alive
  • Rejects GameServer connections whose remote IP is not whitelisted

File Location#

JoinServer/
├── JoinServer.exe
├── JoinServer.ini
└── AllowableIpList.txt

All configuration lives in the JoinServer root. There is no Data/ subfolder.

Configuration Files#

FilePurpose
JoinServer.iniDatabase, ports, authentication mode, license, Server Manager control channel (ControlPort 55992, ControlKey, ControlBind, ControlInstance)
AllowableIpList.txtGameServer IP whitelist

Startup Order#

License activation#

JoinServer reads LicenseKey from JoinServer.ini and contacts the license service. If activation fails, the process exits before any socket is opened.

Database connect#

Connects to SQL Server using JoinServerODBC, JoinServerUSER, JoinServerPASS. If the connection fails, JoinServer stops before opening any ports.

TCP listen#

Opens JoinServerPort for GameServer connections. Worker and queue threads for the TCP listener are spawned in this step.

UDP target resolve#

Resolves ConnectServerAddress:ConnectServerPort for the outbound heartbeat. A bad hostname or unresolvable address fails the step and shuts JoinServer down; the actual heartbeat datagram is not sent until the one-second timer starts firing.

IP whitelist load#

Reads AllowableIpList.txt. If this file is missing, empty, or malformed, every incoming GameServer connection is rejected.

Dependencies#

  • SQL Server reachable via the configured ODBC DSN, with the MEMB_INFO schema and WZ_* stored procedures installed
  • ConnectServer reachable at ConnectServerAddress:ConnectServerPort by UDP - see ConnectServer
  • GameServer IPs listed in AllowableIpList.txt

Common Issues#

  • "Could not connect to database" - verify the ODBC DSN exists on the machine running JoinServer and the credentials are valid
  • GameServer connects then drops immediately - its remote IP is not in AllowableIpList.txt
  • ConnectServer shows JoinServer offline - ConnectServerAddress or ConnectServerPort is wrong, or a firewall blocks the outbound UDP datagram from JoinServer to ConnectServer
  • Login works but map warp fails - the transfer auth code was not consumed within 30 seconds; the account is cleared by the once-per-second disconnect sweep and the player is kicked

Last updated October 1, 2026