123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544 |
- #ifndef __ENET_ENET_H__
- #define __ENET_ENET_H__
- #ifdef __cplusplus
- extern "C"
- {
- #endif
- #include <stdlib.h>
- #ifdef WIN32
- #include "enet/win32.h"
- #else
- #include "enet/unix.h"
- #endif
- #include "enet/types.h"
- #include "enet/protocol.h"
- #include "enet/list.h"
- #include "enet/callbacks.h"
- #define ENET_VERSION_MAJOR 1
- #define ENET_VERSION_MINOR 3
- #define ENET_VERSION_PATCH 2
- #define ENET_VERSION_CREATE(major, minor, patch) (((major)<<16) | ((minor)<<8) | (patch))
- #define ENET_VERSION ENET_VERSION_CREATE(ENET_VERSION_MAJOR, ENET_VERSION_MINOR, ENET_VERSION_PATCH)
- typedef enet_uint32 ENetVersion;
- typedef enum _ENetSocketType
- {
- ENET_SOCKET_TYPE_STREAM = 1,
- ENET_SOCKET_TYPE_DATAGRAM = 2
- } ENetSocketType;
- typedef enum _ENetSocketWait
- {
- ENET_SOCKET_WAIT_NONE = 0,
- ENET_SOCKET_WAIT_SEND = (1 << 0),
- ENET_SOCKET_WAIT_RECEIVE = (1 << 1)
- } ENetSocketWait;
- typedef enum _ENetSocketOption
- {
- ENET_SOCKOPT_NONBLOCK = 1,
- ENET_SOCKOPT_BROADCAST = 2,
- ENET_SOCKOPT_RCVBUF = 3,
- ENET_SOCKOPT_SNDBUF = 4,
- ENET_SOCKOPT_REUSEADDR = 5
- } ENetSocketOption;
- enum
- {
- ENET_HOST_ANY = 0,
- ENET_HOST_BROADCAST = 0xFFFFFFFF,
- ENET_PORT_ANY = 0
- };
- typedef struct _ENetAddress
- {
- enet_uint32 host;
- enet_uint16 port;
- } ENetAddress;
- typedef enum _ENetPacketFlag
- {
-
- ENET_PACKET_FLAG_RELIABLE = (1 << 0),
-
- ENET_PACKET_FLAG_UNSEQUENCED = (1 << 1),
-
- ENET_PACKET_FLAG_NO_ALLOCATE = (1 << 2),
-
- ENET_PACKET_FLAG_UNRELIABLE_FRAGMENT = (1 << 3)
- } ENetPacketFlag;
- struct _ENetPacket;
- typedef void (ENET_CALLBACK * ENetPacketFreeCallback) (struct _ENetPacket *);
- typedef struct _ENetPacket
- {
- size_t referenceCount;
- enet_uint32 flags;
- enet_uint8 * data;
- size_t dataLength;
- ENetPacketFreeCallback freeCallback;
- } ENetPacket;
- typedef struct _ENetAcknowledgement
- {
- ENetListNode acknowledgementList;
- enet_uint32 sentTime;
- ENetProtocol command;
- } ENetAcknowledgement;
- typedef struct _ENetOutgoingCommand
- {
- ENetListNode outgoingCommandList;
- enet_uint16 reliableSequenceNumber;
- enet_uint16 unreliableSequenceNumber;
- enet_uint32 sentTime;
- enet_uint32 roundTripTimeout;
- enet_uint32 roundTripTimeoutLimit;
- enet_uint32 fragmentOffset;
- enet_uint16 fragmentLength;
- enet_uint16 sendAttempts;
- ENetProtocol command;
- ENetPacket * packet;
- } ENetOutgoingCommand;
- typedef struct _ENetIncomingCommand
- {
- ENetListNode incomingCommandList;
- enet_uint16 reliableSequenceNumber;
- enet_uint16 unreliableSequenceNumber;
- ENetProtocol command;
- enet_uint32 fragmentCount;
- enet_uint32 fragmentsRemaining;
- enet_uint32 * fragments;
- ENetPacket * packet;
- } ENetIncomingCommand;
- typedef enum _ENetPeerState
- {
- ENET_PEER_STATE_DISCONNECTED = 0,
- ENET_PEER_STATE_CONNECTING = 1,
- ENET_PEER_STATE_ACKNOWLEDGING_CONNECT = 2,
- ENET_PEER_STATE_CONNECTION_PENDING = 3,
- ENET_PEER_STATE_CONNECTION_SUCCEEDED = 4,
- ENET_PEER_STATE_CONNECTED = 5,
- ENET_PEER_STATE_DISCONNECT_LATER = 6,
- ENET_PEER_STATE_DISCONNECTING = 7,
- ENET_PEER_STATE_ACKNOWLEDGING_DISCONNECT = 8,
- ENET_PEER_STATE_ZOMBIE = 9
- } ENetPeerState;
- #ifndef ENET_BUFFER_MAXIMUM
- #define ENET_BUFFER_MAXIMUM (1 + 2 * ENET_PROTOCOL_MAXIMUM_PACKET_COMMANDS)
- #endif
- enum
- {
- ENET_HOST_RECEIVE_BUFFER_SIZE = 256 * 1024,
- ENET_HOST_SEND_BUFFER_SIZE = 256 * 1024,
- ENET_HOST_BANDWIDTH_THROTTLE_INTERVAL = 1000,
- ENET_HOST_DEFAULT_MTU = 1400,
- ENET_PEER_DEFAULT_ROUND_TRIP_TIME = 500,
- ENET_PEER_DEFAULT_PACKET_THROTTLE = 32,
- ENET_PEER_PACKET_THROTTLE_SCALE = 32,
- ENET_PEER_PACKET_THROTTLE_COUNTER = 7,
- ENET_PEER_PACKET_THROTTLE_ACCELERATION = 2,
- ENET_PEER_PACKET_THROTTLE_DECELERATION = 2,
- ENET_PEER_PACKET_THROTTLE_INTERVAL = 5000,
- ENET_PEER_PACKET_LOSS_SCALE = (1 << 16),
- ENET_PEER_PACKET_LOSS_INTERVAL = 10000,
- ENET_PEER_WINDOW_SIZE_SCALE = 64 * 1024,
- ENET_PEER_TIMEOUT_LIMIT = 32,
- ENET_PEER_TIMEOUT_MINIMUM = 5000,
- ENET_PEER_TIMEOUT_MAXIMUM = 30000,
- ENET_PEER_PING_INTERVAL = 500,
- ENET_PEER_UNSEQUENCED_WINDOWS = 64,
- ENET_PEER_UNSEQUENCED_WINDOW_SIZE = 1024,
- ENET_PEER_FREE_UNSEQUENCED_WINDOWS = 32,
- ENET_PEER_RELIABLE_WINDOWS = 16,
- ENET_PEER_RELIABLE_WINDOW_SIZE = 0x1000,
- ENET_PEER_FREE_RELIABLE_WINDOWS = 8
- };
- typedef struct _ENetChannel
- {
- enet_uint16 outgoingReliableSequenceNumber;
- enet_uint16 outgoingUnreliableSequenceNumber;
- enet_uint16 usedReliableWindows;
- enet_uint16 reliableWindows [ENET_PEER_RELIABLE_WINDOWS];
- enet_uint16 incomingReliableSequenceNumber;
- enet_uint16 incomingUnreliableSequenceNumber;
- ENetList incomingReliableCommands;
- ENetList incomingUnreliableCommands;
- } ENetChannel;
- typedef struct _ENetPeer
- {
- ENetListNode dispatchList;
- struct _ENetHost * host;
- enet_uint16 outgoingPeerID;
- enet_uint16 incomingPeerID;
- enet_uint32 connectID;
- enet_uint8 outgoingSessionID;
- enet_uint8 incomingSessionID;
- ENetAddress address;
- void * data;
- ENetPeerState state;
- ENetChannel * channels;
- size_t channelCount;
- enet_uint32 incomingBandwidth;
- enet_uint32 outgoingBandwidth;
- enet_uint32 incomingBandwidthThrottleEpoch;
- enet_uint32 outgoingBandwidthThrottleEpoch;
- enet_uint32 incomingDataTotal;
- enet_uint32 outgoingDataTotal;
- enet_uint32 lastSendTime;
- enet_uint32 lastReceiveTime;
- enet_uint32 nextTimeout;
- enet_uint32 earliestTimeout;
- enet_uint32 packetLossEpoch;
- enet_uint32 packetsSent;
- enet_uint32 packetsLost;
- enet_uint32 packetLoss;
- enet_uint32 packetLossVariance;
- enet_uint32 packetThrottle;
- enet_uint32 packetThrottleLimit;
- enet_uint32 packetThrottleCounter;
- enet_uint32 packetThrottleEpoch;
- enet_uint32 packetThrottleAcceleration;
- enet_uint32 packetThrottleDeceleration;
- enet_uint32 packetThrottleInterval;
- enet_uint32 lastRoundTripTime;
- enet_uint32 lowestRoundTripTime;
- enet_uint32 lastRoundTripTimeVariance;
- enet_uint32 highestRoundTripTimeVariance;
- enet_uint32 roundTripTime;
- enet_uint32 roundTripTimeVariance;
- enet_uint32 mtu;
- enet_uint32 windowSize;
- enet_uint32 reliableDataInTransit;
- enet_uint16 outgoingReliableSequenceNumber;
- ENetList acknowledgements;
- ENetList sentReliableCommands;
- ENetList sentUnreliableCommands;
- ENetList outgoingReliableCommands;
- ENetList outgoingUnreliableCommands;
- ENetList dispatchedCommands;
- int needsDispatch;
- enet_uint16 incomingUnsequencedGroup;
- enet_uint16 outgoingUnsequencedGroup;
- enet_uint32 unsequencedWindow [ENET_PEER_UNSEQUENCED_WINDOW_SIZE / 32];
- enet_uint32 eventData;
- } ENetPeer;
- typedef struct _ENetCompressor
- {
-
- void * context;
-
- size_t (ENET_CALLBACK * compress) (void * context, const ENetBuffer * inBuffers, size_t inBufferCount, size_t inLimit, enet_uint8 * outData, size_t outLimit);
-
- size_t (ENET_CALLBACK * decompress) (void * context, const enet_uint8 * inData, size_t inLimit, enet_uint8 * outData, size_t outLimit);
-
- void (ENET_CALLBACK * destroy) (void * context);
- } ENetCompressor;
- typedef enet_uint32 (ENET_CALLBACK * ENetChecksumCallback) (const ENetBuffer * buffers, size_t bufferCount);
-
- typedef struct _ENetHost
- {
- ENetSocket socket;
- ENetAddress address;
- enet_uint32 incomingBandwidth;
- enet_uint32 outgoingBandwidth;
- enet_uint32 bandwidthThrottleEpoch;
- enet_uint32 mtu;
- enet_uint32 randomSeed;
- int recalculateBandwidthLimits;
- ENetPeer * peers;
- size_t peerCount;
- size_t channelLimit;
- enet_uint32 serviceTime;
- ENetList dispatchQueue;
- int continueSending;
- size_t packetSize;
- enet_uint16 headerFlags;
- ENetProtocol commands [ENET_PROTOCOL_MAXIMUM_PACKET_COMMANDS];
- size_t commandCount;
- ENetBuffer buffers [ENET_BUFFER_MAXIMUM];
- size_t bufferCount;
- ENetChecksumCallback checksum;
- ENetCompressor compressor;
- enet_uint8 packetData [2][ENET_PROTOCOL_MAXIMUM_MTU];
- ENetAddress receivedAddress;
- enet_uint8 * receivedData;
- size_t receivedDataLength;
- enet_uint32 totalSentData;
- enet_uint32 totalSentPackets;
- enet_uint32 totalReceivedData;
- enet_uint32 totalReceivedPackets;
- } ENetHost;
- typedef enum _ENetEventType
- {
-
- ENET_EVENT_TYPE_NONE = 0,
-
- ENET_EVENT_TYPE_CONNECT = 1,
-
- ENET_EVENT_TYPE_DISCONNECT = 2,
-
- ENET_EVENT_TYPE_RECEIVE = 3
- } ENetEventType;
- typedef struct _ENetEvent
- {
- ENetEventType type;
- ENetPeer * peer;
- enet_uint8 channelID;
- enet_uint32 data;
- ENetPacket * packet;
- } ENetEvent;
- ENET_API int enet_initialize (void);
- ENET_API int enet_initialize_with_callbacks (ENetVersion version, const ENetCallbacks * inits);
- ENET_API void enet_deinitialize (void);
- ENET_API enet_uint32 enet_time_get (void);
- ENET_API void enet_time_set (enet_uint32);
- ENET_API ENetSocket enet_socket_create (ENetSocketType);
- ENET_API int enet_socket_bind (ENetSocket, const ENetAddress *);
- ENET_API int enet_socket_listen (ENetSocket, int);
- ENET_API ENetSocket enet_socket_accept (ENetSocket, ENetAddress *);
- ENET_API int enet_socket_connect (ENetSocket, const ENetAddress *);
- ENET_API int enet_socket_send (ENetSocket, const ENetAddress *, const ENetBuffer *, size_t);
- ENET_API int enet_socket_receive (ENetSocket, ENetAddress *, ENetBuffer *, size_t);
- ENET_API int enet_socket_wait (ENetSocket, enet_uint32 *, enet_uint32);
- ENET_API int enet_socket_set_option (ENetSocket, ENetSocketOption, int);
- ENET_API void enet_socket_destroy (ENetSocket);
- ENET_API int enet_socketset_select (ENetSocket, ENetSocketSet *, ENetSocketSet *, enet_uint32);
- ENET_API int enet_address_set_host (ENetAddress * address, const char * hostName);
- ENET_API int enet_address_get_host_ip (const ENetAddress * address, char * hostName, size_t nameLength);
- ENET_API int enet_address_get_host (const ENetAddress * address, char * hostName, size_t nameLength);
- ENET_API ENetPacket * enet_packet_create (const void *, size_t, enet_uint32);
- ENET_API void enet_packet_destroy (ENetPacket *);
- ENET_API int enet_packet_resize (ENetPacket *, size_t);
- extern enet_uint32 enet_crc32 (const ENetBuffer *, size_t);
-
- ENET_API ENetHost * enet_host_create (const ENetAddress *, size_t, size_t, enet_uint32, enet_uint32);
- ENET_API void enet_host_destroy (ENetHost *);
- ENET_API ENetPeer * enet_host_connect (ENetHost *, const ENetAddress *, size_t, enet_uint32);
- ENET_API int enet_host_check_events (ENetHost *, ENetEvent *);
- ENET_API int enet_host_service (ENetHost *, ENetEvent *, enet_uint32);
- ENET_API void enet_host_flush (ENetHost *);
- ENET_API void enet_host_broadcast (ENetHost *, enet_uint8, ENetPacket *);
- ENET_API void enet_host_compress (ENetHost *, const ENetCompressor *);
- ENET_API int enet_host_compress_with_range_coder (ENetHost * host);
- ENET_API void enet_host_channel_limit (ENetHost *, size_t);
- ENET_API void enet_host_bandwidth_limit (ENetHost *, enet_uint32, enet_uint32);
- extern void enet_host_bandwidth_throttle (ENetHost *);
- ENET_API int enet_peer_send (ENetPeer *, enet_uint8, ENetPacket *);
- ENET_API ENetPacket * enet_peer_receive (ENetPeer *, enet_uint8 * channelID);
- ENET_API void enet_peer_ping (ENetPeer *);
- ENET_API void enet_peer_reset (ENetPeer *);
- ENET_API void enet_peer_disconnect (ENetPeer *, enet_uint32);
- ENET_API void enet_peer_disconnect_now (ENetPeer *, enet_uint32);
- ENET_API void enet_peer_disconnect_later (ENetPeer *, enet_uint32);
- ENET_API void enet_peer_throttle_configure (ENetPeer *, enet_uint32, enet_uint32, enet_uint32);
- extern int enet_peer_throttle (ENetPeer *, enet_uint32);
- extern void enet_peer_reset_queues (ENetPeer *);
- extern void enet_peer_setup_outgoing_command (ENetPeer *, ENetOutgoingCommand *);
- extern ENetOutgoingCommand * enet_peer_queue_outgoing_command (ENetPeer *, const ENetProtocol *, ENetPacket *, enet_uint32, enet_uint16);
- extern ENetIncomingCommand * enet_peer_queue_incoming_command (ENetPeer *, const ENetProtocol *, ENetPacket *, enet_uint32);
- extern ENetAcknowledgement * enet_peer_queue_acknowledgement (ENetPeer *, const ENetProtocol *, enet_uint16);
- extern void enet_peer_dispatch_incoming_unreliable_commands (ENetPeer *, ENetChannel *);
- extern void enet_peer_dispatch_incoming_reliable_commands (ENetPeer *, ENetChannel *);
- ENET_API void * enet_range_coder_create (void);
- ENET_API void enet_range_coder_destroy (void *);
- ENET_API size_t enet_range_coder_compress (void *, const ENetBuffer *, size_t, size_t, enet_uint8 *, size_t);
- ENET_API size_t enet_range_coder_decompress (void *, const enet_uint8 *, size_t, enet_uint8 *, size_t);
-
- extern size_t enet_protocol_command_size (enet_uint8);
- #ifdef __cplusplus
- }
- #endif
- #endif
|