Complete disaster-recovery snapshot: engine/game source, game data assets, VC6 toolchain + DX SDKs, build outputs, deployed game, and _UNUSED archive. Large binaries in Git LFS; text preserved byte-for-byte (core.autocrlf=false, no eol attributes). See RECOVERY.md for the one-clone rebuild procedure.
161 lines
4.9 KiB
C
161 lines
4.9 KiB
C
/******
|
|
goautil.h
|
|
GameSpy Developer SDK
|
|
|
|
Copyright 1999 GameSpy Industries, Inc
|
|
|
|
Suite E-204
|
|
2900 Bristol Street
|
|
Costa Mesa, CA 92626
|
|
(714)549-7689
|
|
Fax(714)549-0757
|
|
|
|
******
|
|
|
|
Please see the GameSpy Developer SDK documentation for more
|
|
information
|
|
|
|
******/
|
|
|
|
#ifndef _GOAUTIL_H_
|
|
#define _GOAUTIL_H_
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/********
|
|
ERROR CONSTANTS
|
|
---------------
|
|
These constants are returned from goa_init to signal an error condition
|
|
***************/
|
|
|
|
#define E_GOA_WSOCKERROR 1
|
|
#define E_GOA_BINDERROR 2
|
|
#define E_GOA_DNSERROR 3
|
|
#define E_GOA_CONNERROR 4
|
|
|
|
|
|
/********
|
|
goa_querycallback_t
|
|
-------------------
|
|
This is the prototype for the callback functions your game needs to
|
|
implement for each of the four basic query types. The callback works the
|
|
same for each query type.
|
|
|
|
[outbuf] is a pre-allocated buffer for you to place the query reply. It's size is
|
|
[maxlen] (default is 1400). If you need larger, you can adjust the
|
|
defines in goautil.c
|
|
[userdata] is the pointer that was passed into goa_init. You can use this for an
|
|
object or structure pointer if needed.
|
|
|
|
Simply fill outbuf with the correct data for the query type (consult the sample
|
|
apps and the GameSpy Developer Spec).
|
|
outbuf should be a NULL terminated ANSI string.
|
|
********/
|
|
typedef void (*goa_querycallback_t)(char *outbuf, int maxlen, void *userdata);
|
|
|
|
|
|
/********
|
|
GLOBAL CALLBACK VARS
|
|
---------------------
|
|
Set these callbacks to your implementation of each callback function.
|
|
You can set these before or after calling goa_init, but they must be set
|
|
prior to the first call to goa_process_queries.
|
|
********/
|
|
extern goa_querycallback_t goa_basic_callback;
|
|
extern goa_querycallback_t goa_info_callback;
|
|
extern goa_querycallback_t goa_rules_callback;
|
|
extern goa_querycallback_t goa_players_callback;
|
|
|
|
/*********
|
|
SECRET KEY
|
|
----------
|
|
Initialize this string to the secret key to use for validation.
|
|
Make sure you null-terminate the key.
|
|
You can set the key before or after calling goa_init, but it must be
|
|
set prior to the first call to goa_process_queries.
|
|
*********/
|
|
extern char goa_secret_key[256];
|
|
|
|
|
|
/************
|
|
GOA_INIT
|
|
--------
|
|
This creates/binds the sockets needed for heartbeats and queries/replies.
|
|
[queryport] is the port you want to accept queries on. Only 1 server per
|
|
machine can use this port, so you need a way to specify alternate ports if
|
|
running more than 1 server.Optionally, you can pass in 0 to have a port
|
|
chosen automatically (makes it harder for debugging/testing).
|
|
[gamename] is the unique gamename that you were given
|
|
[ip] is an optional parameter that determines which dotted IP address to bind to on
|
|
a multi-homed machine. You can pass NULL to bind to all IP addresses.
|
|
[userdata] is an optional, implementation specific parameter that will be
|
|
passed to all callback functions. Use it to store an object or structure
|
|
pointer if needed.
|
|
|
|
Returns
|
|
0 is successful, otherwise one of the E_GOA constants above.
|
|
E_GOA_BINDERROR usually means that the queryport is already in use.
|
|
************/
|
|
int goa_init(int queryport, char *gamename, char *ip, void *userdata);
|
|
|
|
|
|
/*******************
|
|
GOA_PROCESS_QUERIES
|
|
-------------------
|
|
This function should be called somewhere in your main program loop to
|
|
process any pending server queries and send a heartbeat if 5 minutes has
|
|
elapsed.
|
|
|
|
Query replies are very latency sensative, so you should make sure this
|
|
function is called at least every 100ms while your game is in progress.
|
|
The function has very low overhead and should not cause any performance
|
|
problems.
|
|
********************/
|
|
void goa_process_queries(void);
|
|
|
|
/*******************
|
|
GOA_CHECK_QUERIES
|
|
-------------------
|
|
This funtion processes any pending server queries. This is normally
|
|
called from goa_process_queries(), which is the function you should call
|
|
from somewhere in your main program loop.
|
|
********************/
|
|
void goa_check_queries(void);
|
|
|
|
/*******************
|
|
GOA_CHECK_SEND_HEARTBEAT
|
|
-------------------
|
|
This funtion sends a heartbeat if 5 minutes has elapsed. It is normally
|
|
called from goa_process_queries(), which should be called from your main
|
|
program loop.
|
|
********************/
|
|
void goa_check_send_heartbeat(void);
|
|
|
|
|
|
/*****************
|
|
GOA_SEND_STATECHANGED
|
|
--------------------
|
|
This function forces a \statechanged\ heartbeat to be sent immediately.
|
|
Use it any time you have changed the gamestate of your game to signal the
|
|
master to update your status.
|
|
Also use it before your game exits by changing the gamestate to "exiting"
|
|
and sending a statechanged heartbeat.
|
|
*******************/
|
|
void goa_send_statechanged(void);
|
|
|
|
/*****************
|
|
GOA_SHUTDOWN
|
|
------------
|
|
This function closes the sockets created in goa_init and takes care of
|
|
any misc. cleanup. You should try to call it when before exiting the server
|
|
if goa_init was called.
|
|
******************/
|
|
void goa_shutdown(void);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif |