📄 server_interface.h
字号:
// This file defines the server interface.
#ifndef __SERVER_INTERFACE_H__
#define __SERVER_INTERFACE_H__
#include "basedefs_de.h"
#define SI_VERSION 2
// Update flags for the server.
// Non-active (ie: the server should just eat up time but not update anything).
#define UPDATEFLAG_NONACTIVE 1
// Create status.
#define SI_CREATESTATUS int
#define SI_OK 0 // Create a server successfully.
#define SI_ALREADYINSTANCED 1 // A server has already been instanced.
#define SI_INVALIDVERSION 2 // Different server version.
#define SI_ERRORINITTING 3 // Error initializing.
#define SI_CANTLOADRESOURCEMODULE 4 // Couldn't load de_msg.dll.
// Client info structure.
#define MAX_CLIENTINFO_NAME 64
typedef struct ClientInfo_t
{
char m_sName[MAX_CLIENTINFO_NAME];
DDWORD m_ClientID;
float m_Ping;
} ClientInfo;
// You should derive from this class and pass a pointer to it to
// ServerInterface::SetHandler so it can talk back to you.
class ServerAppHandler
{
public:
// This message comes from ServerDE::SendToServerApp. Format stuff
// going back and forth into strings to reduce incompatibilities.
virtual DRESULT ShellMessageFn(char *pInfo) {return LT_OK;}
// All console output goes into here.
virtual DRESULT ConsoleOutputFn(char *pMsg) {return LT_OK;}
// Called when the server has run out of memory. A message should
// be displayed and exit() should be called immediately.. if you don't,
// LT exits() right after calling OutOfMemory().
virtual DRESULT OutOfMemory() {return LT_OK;}
// The engine calls this for packets it doesn't understand (used for Gamespy).
virtual DRESULT ProcessPacket(char *pData, DDWORD dataLen, DBYTE senderAddr[4], D_WORD senderPort) {return LT_OK;}
};
class ServerInterface
{
public:
// Set this on startup.. this is how the engine and game talk to you.
virtual DRESULT SetAppHandler(ServerAppHandler *pHandler)=0;
// Run a string in the console.
virtual DRESULT RunConsoleString(char *pStr)=0;
// Get access to console variables. hVar is filled in. If a variable with the given
// name doesn't exist and pDefaultVal is set, it'll set the value to pDefaultVal
// and return DE_FINISHED. If it already existed, it returns LT_OK.
virtual DRESULT GetConsoleVar(char *pName, HCONSOLEVAR *hVar, char *pDefaultVal)=0;
virtual DRESULT GetVarValueFloat(HCONSOLEVAR hVar, float *val)=0;
virtual DRESULT GetVarValueString(HCONSOLEVAR hVar, char *pStr, DDWORD maxLen)=0;
// Load/save config files into the server's console state.
virtual DRESULT LoadConfigFile(char *pFilename)=0;
virtual DRESULT SaveConfigFile(char *pFilename)=0;
// Calls ServerShellDE::ServerAppMessageFn (the equivalent of the game
// calling ServerDE::SendToServerApp but in the opposite direction).
// Returns LT_NOTFOUND if the server shell hasn't been created (it gets
// created in AddResources).
virtual DRESULT SendToServerShell(char *pInfo)=0;
// Add resources for the server to use.
virtual DBOOL AddResources(char **pResources, DDWORD nResources)=0;
// Look thru the available worlds.
virtual struct FileEntry_t* GetFileList(char *pDirName)=0;
virtual void FreeFileList(struct FileEntry_t *pList)=0;
// Run a world.
virtual DBOOL StartWorld(StartGameRequest *pRequest)=0;
// Look at the clients.
virtual int GetNumClients()=0;
virtual DBOOL GetClientName(int index, char *pName, int maxChars)=0;
virtual DBOOL GetClientInfo(int index, ClientInfo* pInfo)=0;
virtual DBOOL BootClient(DDWORD dwClientID)=0;
// When an error occurs, you can get the error code and error string.
virtual int GetErrorCode()=0;
virtual void GetErrorString(char *pString, int maxLen)=0;
// Update as often as possible.
virtual DBOOL Update(long flags)=0;
// Call this function, with the app's DGUID, before calling any other
// network functions. pDriver can be NULL to use the default net driver.
// No flags are currently supported.
virtual DBOOL InitNetworking(char *pDriver, DDWORD dwFlags)=0;
// Gets a list (and count) of enumerated services.
virtual DBOOL GetServiceList(NetService *&pListHead)=0;
// Call this function when you are finished using the list returned by
// GetServiceList().
virtual DBOOL FreeServiceList(NetService *pListHead)=0;
// Selects the given service as the one to use.
virtual DBOOL SelectService(HNETSERVICE hNetService)=0;
// Updates the sessions's name (only the host can do this).
virtual DBOOL UpdateSessionName(const char* sName)=0;
// Hosts the game session.
virtual DBOOL HostGame(NetHost* pHostInfo)=0;
// Gets the tcp/ip address of the main driver if available.
virtual DBOOL GetTcpIpAddress(char* sAddress, DDWORD dwBufferSize, unsigned short &hostPort)=0;
// Send a packet thru tcp/ip if we're using tcp/ip.
virtual DRESULT SendTo(const void *pData, DDWORD len, const char *sAddr, DDWORD port)=0;
};
// The server DLL implements these functions to create and delete a
// server. You can only have one server at a time. Pass in SI_VERSION to CreateServer.
// SI_CREATESTATUS CreateServer(int version, struct ServerInterface_t **ppServer);
// void DeleteServer();
typedef SI_CREATESTATUS (*CreateServerFn)(int version, DGUID &appGuid, ServerInterface **ppServer);
typedef void (*DeleteServerFn)();
#endif // __SERVER_INTERFACE_H__
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -