mirror of
https://github.com/openmoh/openmohaa.git
synced 2025-04-28 13:47:58 +03:00
92 lines
3.4 KiB
C
92 lines
3.4 KiB
C
/*
|
|
GameSpy Peer SDK
|
|
Dan "Mr. Pants" Schoenblum
|
|
dan@gamespy.com
|
|
|
|
Copyright 1999-2007 GameSpy Industries, Inc
|
|
|
|
devsupport@gamespy.com
|
|
*/
|
|
|
|
#ifndef _PEERPLAYERS_H_
|
|
#define _PEERPLAYERS_H_
|
|
|
|
/*************
|
|
** INCLUDES **
|
|
*************/
|
|
#include "peerMain.h"
|
|
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
|
|
/************
|
|
** DEFINES **
|
|
************/
|
|
#define PI_PING_HISTORY_LEN 4
|
|
|
|
/**********
|
|
** TYPES **
|
|
**********/
|
|
typedef struct piPlayer
|
|
{
|
|
char nick[PI_NICK_MAX_LEN]; // this has to be first
|
|
PEERBool inRoom[NumRooms]; // true if in the room
|
|
PEERBool local; // true for the local player
|
|
|
|
unsigned int IP; // the IP in network byte order
|
|
int profileID; // gp profile id
|
|
PEERBool gotIPAndProfileID; // true if we have the IP and profile ID
|
|
|
|
int flags[NumRooms]; // player's room flags
|
|
|
|
// Ping stuff
|
|
unsigned long lastPingSend; // last time a ping was sent
|
|
unsigned long lastPingRecv; // last time a ping was received
|
|
unsigned long lastXping; // last time a xping was sent
|
|
PEERBool waitingForPing; // if true we're waiting for a ping to return
|
|
int pingsReturned; // number of pings returned
|
|
int pingsLostConsecutive; // number of pings lost in a row
|
|
int pingAverage; // the average ping time
|
|
int pingHistory[PI_PING_HISTORY_LEN]; // history of pings
|
|
int pingHistoryNum; // the number of pings in the ping history
|
|
int numPings; // number of pings for this player
|
|
PEERBool xpingSent; // if true, we already sent a xping with the current average
|
|
PEERBool inPingRoom; // true if the player is in a room getting pinged
|
|
PEERBool inXpingRoom; // true if the player is in a room getting xpinged
|
|
PEERBool mustPing; // if true, ping this player as soon as possible
|
|
PEERBool pingOnce; // a one-time ping has been triggered with peerPingPlayer
|
|
} piPlayer;
|
|
|
|
/**************
|
|
** FUNCTIONS **
|
|
**************/
|
|
PEERBool piPlayersInit(PEER peer);
|
|
void piPlayersCleanup(PEER peer);
|
|
piPlayer * piPlayerJoinedRoom(PEER peer, const char * nick, RoomType roomType, int mode);
|
|
void piPlayerLeftRoom(PEER peer, const char * nick, RoomType roomType);
|
|
void piPlayerChangedNick(PEER peer, const char * oldNick, const char * newNick);
|
|
void piClearRoomPlayers(PEER peer, RoomType roomType);
|
|
piPlayer * piGetPlayer(PEER peer, const char * nick);
|
|
typedef void (* piEnumRoomPlayersCallback)(PEER peer, RoomType roomType, piPlayer * player, int index, void * param);
|
|
void piEnumRoomPlayers(PEER peer, RoomType roomType, piEnumRoomPlayersCallback callback, void * param);
|
|
piPlayer * piFindPlayerByIP(PEER peer, unsigned int IP);
|
|
void piSetPlayerIPAndProfileID(PEER peer, const char * nick, unsigned int IP, int profileID);
|
|
int piParseFlags(const char * flags);
|
|
void piSetPlayerRoomFlags(PEER peer, const char * nick, RoomType roomType, const char * flags);
|
|
void piSetPlayerModeFlags(PEER peer, const char * nick, RoomType roomType, int mode);
|
|
PEERBool piIsPlayerVIP(piPlayer * player, RoomType roomType);
|
|
PEERBool piIsPlayerHost(piPlayer * player);
|
|
PEERBool piIsPlayerOp(piPlayer * player);
|
|
piPlayer * piFindPlayerByIndex(PEER peer, RoomType roomType, int index);
|
|
piPlayer * piFindRoomHost(PEER peer, RoomType roomType);
|
|
piPlayer * piFindRoomOp(PEER peer, RoomType roomType);
|
|
int piCountRoomOps(PEER peer, RoomType roomType, const char * exclude);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|