You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
177 lines
5.2 KiB
177 lines
5.2 KiB
#pragma once |
|
|
|
#include <cstddef> |
|
#include <cstdint> |
|
#include <string> |
|
#include <vector> |
|
|
|
#include "multi.h" |
|
|
|
namespace devilution { |
|
|
|
enum game_info : uint8_t { |
|
GAMEINFO_NAME, |
|
GAMEINFO_PASSWORD, |
|
}; |
|
|
|
enum conn_type : uint8_t { |
|
SELCONN_ZT, |
|
SELCONN_TCP, |
|
SELCONN_LOOPBACK, |
|
}; |
|
|
|
enum event_type : uint8_t { |
|
EVENT_TYPE_PLAYER_CREATE_GAME, |
|
EVENT_TYPE_PLAYER_LEAVE_GAME, |
|
EVENT_TYPE_PLAYER_MESSAGE, |
|
}; |
|
|
|
extern const char *ConnectionNames[]; |
|
|
|
struct _SNETCAPS { |
|
uint32_t size; |
|
uint32_t flags; |
|
uint32_t maxmessagesize; |
|
uint32_t maxqueuesize; |
|
uint32_t maxplayers; |
|
uint32_t bytessec; |
|
uint32_t latencyms; |
|
uint32_t defaultturnssec; |
|
uint32_t defaultturnsintransit; |
|
}; |
|
|
|
struct _SNETEVENT { |
|
uint32_t eventid; |
|
uint32_t playerid; |
|
void *data; |
|
uint32_t databytes; |
|
}; |
|
|
|
// Game states |
|
#define GAMESTATE_PRIVATE 0x01 |
|
#define GAMESTATE_FULL 0x02 |
|
#define GAMESTATE_ACTIVE 0x04 |
|
#define GAMESTATE_STARTED 0x08 |
|
#define GAMESTATE_REPLAY 0x80 |
|
|
|
#define PS_CONNECTED 0x10000 |
|
#define PS_TURN_ARRIVED 0x20000 |
|
#define PS_ACTIVE 0x40000 |
|
|
|
#define LEAVE_ENDING 0x40000004 |
|
#define LEAVE_DROP 0x40000006 |
|
|
|
bool SNetCreateGame(const char *pszGameName, const char *pszGamePassword, char *GameTemplateData, int GameTemplateSize, int *playerID); |
|
bool SNetDestroy(); |
|
|
|
/* SNetDropPlayer @ 106 |
|
* |
|
* Drops a player from the current game. |
|
* |
|
* playerid: The player ID for the player to be dropped. |
|
* flags: |
|
* |
|
* Returns true if the function was called successfully and false otherwise. |
|
*/ |
|
bool SNetDropPlayer(int playerid, uint32_t flags); |
|
|
|
/* SNetGetGameInfo @ 107 |
|
* |
|
* Retrieves specific game information from Storm, such as name, password, |
|
* stats, mode, game template, and players. |
|
* |
|
* type: The type of data to retrieve. See GAMEINFO_ flags. |
|
* dst: The destination buffer for the data. |
|
* length: The maximum size of the destination buffer. |
|
* |
|
* Returns true if the function was called successfully and false otherwise. |
|
*/ |
|
bool SNetGetGameInfo(game_info type, void *dst, unsigned int length); |
|
|
|
/* SNetGetTurnsInTransit @ 115 |
|
* |
|
* Retrieves the number of turns (buffers) that have been queued |
|
* before sending them over the network. |
|
* |
|
* turns: A pointer to an integer that will receive the value. |
|
* |
|
* Returns true if the function was called successfully and false otherwise. |
|
*/ |
|
bool SNetGetTurnsInTransit(uint32_t *turns); |
|
|
|
bool SNetJoinGame(char *gameName, char *gamePassword, int *playerid); |
|
|
|
/* SNetLeaveGame @ 119 |
|
* |
|
* Notifies Storm that the player has left the game. Storm will |
|
* notify all connected peers through the network provider. |
|
* |
|
* type: The leave type. It doesn't appear to be important, no documentation available. |
|
* |
|
* Returns true if the function was called successfully and false otherwise. |
|
*/ |
|
bool SNetLeaveGame(int type); |
|
|
|
bool SNetReceiveMessage(int *senderplayerid, void **data, uint32_t *databytes); |
|
bool SNetReceiveTurns(int arraysize, char **arraydata, size_t *arraydatabytes, uint32_t *arrayplayerstatus); |
|
|
|
typedef void (*SEVTHANDLER)(struct _SNETEVENT *); |
|
|
|
/* SNetSendMessage @ 127 |
|
* |
|
* Sends a message to a player given their player ID. Network message |
|
* is sent using class 01 and is retrieved by the other client using |
|
* SNetReceiveMessage(). |
|
* |
|
* playerID: The player index of the player to receive the data. |
|
* Conversely, this field can be one of the following constants: |
|
* SNPLAYER_ALL | Sends the message to all players, including oneself. |
|
* SNPLAYER_OTHERS | Sends the message to all players, except for oneself. |
|
* data: A pointer to the data. |
|
* databytes: The amount of bytes that the data pointer contains. |
|
* |
|
* Returns true if the function was called successfully and false otherwise. |
|
*/ |
|
bool SNetSendMessage(int playerID, void *data, unsigned int databytes); |
|
|
|
// Macro values to target specific players |
|
#define SNPLAYER_ALL -1 |
|
#define SNPLAYER_OTHERS -2 |
|
|
|
/* SNetSendTurn @ 128 |
|
* |
|
* Sends a turn (data packet) to all players in the game. Network data |
|
* is sent using class 02 and is retrieved by the other client using |
|
* SNetReceiveTurns(). |
|
* |
|
* data: A pointer to the data. |
|
* databytes: The amount of bytes that the data pointer contains. |
|
* |
|
* Returns true if the function was called successfully and false otherwise. |
|
*/ |
|
bool SNetSendTurn(char *data, unsigned int databytes); |
|
|
|
uint32_t SErrGetLastError(); |
|
void SErrSetLastError(uint32_t dwErrCode); |
|
|
|
// Values for dwErrCode |
|
#define STORM_ERROR_GAME_TERMINATED 0x85100069 |
|
#define STORM_ERROR_INVALID_PLAYER 0x8510006a |
|
#define STORM_ERROR_NO_MESSAGES_WAITING 0x8510006b |
|
#define STORM_ERROR_NOT_IN_GAME 0x85100070 |
|
|
|
bool SNetGetOwnerTurnsWaiting(uint32_t *); |
|
bool SNetUnregisterEventHandler(event_type); |
|
bool SNetRegisterEventHandler(event_type, SEVTHANDLER); |
|
bool SNetSetBasePlayer(int); |
|
bool SNetInitializeProvider(uint32_t provider, struct GameData *gameData); |
|
void SNetGetProviderCaps(struct _SNETCAPS *); |
|
|
|
bool DvlNet_SendInfoRequest(); |
|
void DvlNet_ClearGamelist(); |
|
std::vector<GameInfo> DvlNet_GetGamelist(); |
|
void DvlNet_SetPassword(std::string pw); |
|
void DvlNet_ClearPassword(); |
|
bool DvlNet_IsPublicGame(); |
|
|
|
} // namespace devilution
|
|
|