For the complete documentation index, see llms.txt. This page is also available as Markdown.

Overview

JoinServer authenticates accounts and brokers transfers between GameServers

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

File
Purpose

Database, ports, authentication mode, license

GameServer IP whitelist

Startup Order

1

License activation

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

2

Database connect

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

3

TCP listen

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

4

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.

5

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