gremlin/src/common/Network.h

133 lines
2.2 KiB
C
Raw Normal View History

2011-01-12 22:05:22 +01:00
#ifndef NETWORK_H_
#define NETWORK_H_
2011-01-18 21:52:05 +01:00
#include "Game.h"
2011-01-12 22:05:22 +01:00
#include "common.h"
2011-01-24 23:52:12 +01:00
#include "enet/enet.h"
#include "yaml-cpp/yaml.h"
2011-01-16 23:02:40 +01:00
#include <string>
2018-11-26 13:15:41 +01:00
namespace gln {
2011-01-25 18:43:49 +01:00
#define EMIT_DEFINE(msg) YAML::Emitter& operator <<(YAML::Emitter& out, const msg& m);
2011-01-12 22:05:22 +01:00
#define MESSAGE_PLAYER_SPAWN 0
#define MESSAGE_PLAYER_KILL 1
#define MESSAGE_ACCEPT 2
#define MESSAGE_PLAYER_UPDATE 3
#define MESSAGE_PLAYER_ACCELERATE 4
#define MESSAGE_BOMB_DROP 5
#define MESSAGE_BOMB_UPDATE 6
#define MESSAGE_POINT_UPDATE 7
#define MESSAGE_TEAM_UPDATE 8
2011-01-24 23:52:12 +01:00
struct player_spawn_message_t {
enum {
id = 0
};
size_t team_id;
size_t player_id;
};
2011-01-25 18:43:49 +01:00
EMIT_DEFINE(player_spawn_message_t)
2011-01-12 22:05:22 +01:00
2011-01-24 23:52:12 +01:00
struct player_kill_message_t {
enum {
id = 1
};
2011-01-12 22:05:22 +01:00
uint16_t player_id;
2011-01-24 23:52:12 +01:00
};
2011-01-25 18:43:49 +01:00
EMIT_DEFINE(player_kill_message_t)
2011-01-12 22:05:22 +01:00
2011-01-24 23:52:12 +01:00
struct accept_message_t {
enum {
id = 2
};
2011-01-12 22:05:22 +01:00
uint16_t player_id;
2011-01-24 23:52:12 +01:00
};
2011-01-25 18:43:49 +01:00
EMIT_DEFINE(accept_message_t)
2011-01-12 22:05:22 +01:00
2011-01-24 23:52:12 +01:00
struct player_update_message_t {
enum {
id = 3
};
2011-01-12 22:05:22 +01:00
uint16_t player_id;
2011-01-24 23:52:12 +01:00
// unsigned int session;
2011-01-12 22:05:22 +01:00
double x, y, z;
double vx, vy, vz;
uint16_t points;
2011-01-24 23:52:12 +01:00
};
2011-01-25 18:43:49 +01:00
EMIT_DEFINE(player_update_message_t)
2011-01-12 22:05:22 +01:00
2011-01-24 23:52:12 +01:00
struct player_accelerate_message_t {
enum {
id = 4
};
2011-01-12 22:05:22 +01:00
uint16_t player_id;
double x, y, z;
2018-11-26 13:15:41 +01:00
double rx, ry, rz;
2011-01-24 23:52:12 +01:00
};
2011-01-25 18:43:49 +01:00
EMIT_DEFINE(player_accelerate_message_t)
2011-01-12 22:05:22 +01:00
2011-01-24 23:52:12 +01:00
struct bomb_drop_meesage_t {
enum {
id = 5
};
2011-01-12 22:05:22 +01:00
double x, y, z;
double vx, vy, vz;
double ttl;
2011-01-24 23:52:12 +01:00
};
2011-01-25 18:43:49 +01:00
EMIT_DEFINE(bomb_drop_meesage_t)
2011-01-12 22:05:22 +01:00
2011-01-24 23:52:12 +01:00
struct bomb_update_meesage_t {
enum {
id = 5
};
2011-01-12 22:05:22 +01:00
uint16_t bomb_index;
double x, y, z;
double vx, vy, vz;
double ttl;
2011-01-24 23:52:12 +01:00
};
2011-01-25 18:43:49 +01:00
EMIT_DEFINE(bomb_update_meesage_t)
2011-01-12 22:05:22 +01:00
2011-01-24 23:52:12 +01:00
struct point_update_mesage_t {
enum {
id = 7
};
2011-01-12 22:05:22 +01:00
uint16_t point_index;
uint8_t status;
double x, y, z;
2011-01-24 23:52:12 +01:00
};
2011-01-25 18:43:49 +01:00
EMIT_DEFINE(point_update_mesage_t)
2011-01-12 22:05:22 +01:00
struct team_update_message_t {
2011-01-24 23:52:12 +01:00
enum {
id = 8
};
2011-01-12 22:05:22 +01:00
uint16_t team_id;
uint16_t points;
uint16_t wins;
};
2011-01-25 18:43:49 +01:00
EMIT_DEFINE(team_update_message_t)
2011-01-24 23:52:12 +01:00
2011-01-16 23:02:40 +01:00
class Network {
public:
2011-01-18 21:52:05 +01:00
Network(Game* game);
2011-01-16 23:02:40 +01:00
void initialize(const std::string &host);
void shutdown();
void dispatch(uint8_t *data, size_t length);
void service(uint32_t timeout);
void sendGameUpdates();
void sendMessage(uint8_t *data, size_t length);
2011-01-24 23:52:12 +01:00
void send(const YAML::Emitter &em);
2011-01-16 23:02:40 +01:00
protected:
2011-01-18 21:52:05 +01:00
Game *game;
2011-01-16 23:02:40 +01:00
ENetHost *host;
ENetPeer *client_peer;
};
2011-01-12 22:05:22 +01:00
2018-11-26 13:15:41 +01:00
} // namespace gln
2011-01-12 22:05:22 +01:00
#endif /* NETWORK_H_ */