1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186
|
/*
gpiPeer.h
GameSpy Presence SDK
Dan "Mr. Pants" Schoenblum
Copyright 1999-2007 GameSpy Industries, Inc
devsupport@gamespy.com
***********************************************************************
Please see the GameSpy Presence SDK documentation for more information
**********************************************************************/
#ifndef _GPIPEER_H_
#define _GPIPEER_H_
//INCLUDES
//////////
#include "gpi.h"
//DEFINES
/////////
// Peer states.
///////////////
#define GPI_PEER_NOT_CONNECTED 100
#define GPI_PEER_GETTING_SIG 101
#define GPI_PEER_GOT_SIG 102
#define GPI_PEER_CONNECTING 103
#define GPI_PEER_WAITING 104
#define GPI_PEER_CONNECTED 105
#define GPI_PEER_DISCONNECTED 106
// Timeout for a peer connection, in milliseconds.
/////////////////////////////////////////////
#define GPI_PEER_TIMEOUT (10 * 1000)
// Timeout for a peer operation, in milliseconds
////////////////////////////////////////////
#define GPI_PEER_OP_TIMEOUT 60000
typedef enum
{
GPI_PEER_OP_STATE_NONE,
GPI_PEER_OP_STATE_REQUESTED,
GPI_PEER_OP_STATE_FINISHED
} GPIPeerOpState;
typedef struct GPITransferID_s * GPITransferID_st;
//TYPES
///////
// A peer message.
//////////////////
typedef struct GPIMessage
{
GPIBuffer buffer;
int type;
int start;
} GPIMessage;
typedef struct _GPIPeerOp
{
GPIPeerOpState state;
void *userData;
GPCallback callback;
struct _GPIPeerOp * next;
int type;
gsi_time timeout;
} GPIPeerOp;
typedef struct _GPIPeerOpQueue
{
GPIPeerOp * opList;
GPIPeerOp * first;
GPIPeerOp * last;
} GPIPeerOpQueue;
// A peer connection.
/////////////////////
typedef struct GPIPeer_s
{
int state;
GPIBool initiated;
//SOCKET sock;
unsigned int ip;
unsigned short port;
GPProfile profile;
time_t timeout;
int nackCount;
GPIBuffer inputBuffer;
GPIBuffer outputBuffer;
DArray messages;
GPIPeerOpQueue peerOpQueue;
struct GPIPeer_s * pnext;
} GPIPeer;
//FUNCTIONS
///////////
GPResult
gpiProcessPeers(
GPConnection * connection
);
GPResult
gpiPeerGetSig(
GPConnection * connection,
GPIPeer * peer
);
GPResult
gpiPeerStartConnect(
GPConnection * connection,
GPIPeer * peer
);
// NOTE: use this function when in a gp function
GPIPeer * gpiGetPeerByProfile(const GPConnection * connection,
int profileid);
// NOTE: use this function only when in a UDP layer callback
GPIPeer *gpiGetPeerByAddr(const GPConnection *connection,
unsigned int ip,
unsigned short port);
gsi_bool gpiIsPeerConnected(GPIPeer *peer);
GPIPeer *
gpiAddPeer(
GPConnection * connection,
int profileid,
GPIBool initiate
);
void
gpiDestroyPeer(
GPConnection * connection,
GPIPeer * peer
);
void
gpiRemovePeer(
GPConnection * connection,
GPIPeer * peer
);
GPResult
gpiPeerAddMessage(
GPConnection * connection,
GPIPeer * peer,
int type,
const char * message
);
GPResult
gpiPeerStartTransferMessage(
GPConnection * connection,
GPIPeer * peer,
int type,
const struct GPITransferID_s * transferID
);
GPResult
gpiPeerFinishTransferMessage(
GPConnection * connection,
GPIPeer * peer,
const char * message,
int len
);
GPResult
gpiPeerSendMessages(
GPConnection * connection,
GPIPeer * peer
);
void gpiPeerLeftCallback(unsigned int ip, unsigned short port, GSUdpCloseReason reason, void *userData);
void gpiPeerMessageCallback(unsigned int ip, unsigned short port, unsigned char *message,
unsigned int messageLength, gsi_bool reliable, void *userData);
void gpiPeerAcceptedCallback(unsigned int ip, unsigned short port,
GSUdpErrorCode error, gsi_bool rejected, void *userData);
void gpiPeerPingReplyCallback(unsigned int ip, unsigned short port, unsigned int latency, void *userData);
void gpiPeerAddOp(GPIPeer *peer, GPIPeerOp *operation);
void gpiPeerRemoveOp(GPIPeer *peer, GPIPeerOp *operation);
void gpiCheckTimedOutPeerOperations(GPConnection * connection, GPIPeer * peer);
#endif
|