24 #include <netcomm/socket/datagram.h>
30 using namespace fawkes;
32 static const uint32_t SPL_STRUCT_VERSION = 6;
34 static const uint8_t SPL_STATE_INITIAL = 0;
35 static const uint8_t SPL_STATE_READY = 1;
36 static const uint8_t SPL_STATE_SET = 2;
37 static const uint8_t SPL_STATE_PLAYING = 3;
38 static const uint8_t SPL_STATE_FINISHED = 4;
40 static const uint8_t SPL_STATE2_NORMAL = 0;
41 static const uint8_t SPL_STATE2_PENALTYSHOOT = 1;
43 static const uint8_t SPL_PENALTY_NONE = 0;
44 static const uint8_t SPL_PENALTY_BALL_HOLDING = 1;
45 static const uint8_t SPL_PENALTY_GOALIE_PUSHING = 2;
46 static const uint8_t SPL_PENALTY_PLAYER_PUSHING = 3;
47 static const uint8_t SPL_PENALTY_ILLEGAL_DEFENDER = 4;
48 static const uint8_t SPL_PENALTY_ILLEGAL_DEFENSE = 5;
49 static const uint8_t SPL_PENALTY_OBSTRUCTION = 6;
50 static const uint8_t SPL_PENALTY_REQ_FOR_PICKUP = 7;
51 static const uint8_t SPL_PENALTY_LEAVING = 8;
52 static const uint8_t SPL_PENALTY_DAMAGE = 9;
53 static const uint8_t SPL_PENALTY_MANUAL = 10;
56 static const uint8_t SPL_TEAM_BLUE = 0;
57 static const uint8_t SPL_TEAM_RED = 1;
59 static const char SPL_GAMECONTROL_HEADER[GCHS] = {
'R',
'G',
'm',
'e'};
77 const char *broadcast_ip,
78 unsigned short int broadcast_port,
84 __our_team = our_team;
85 __our_goal = our_goal;
87 __s->
bind(broadcast_port);
89 for (
unsigned int i = 0; i < MAX_NUM_PLAYERS; ++i) {
90 __penalties[i] = SPL_PENALTY_NONE;
107 switch (msg->
state) {
108 case SPL_STATE_INITIAL:
111 case SPL_STATE_READY:
113 (msg->
kick_off_team == SPL_TEAM_BLUE) ? TEAM_CYAN : TEAM_MAGENTA);
117 (msg->
kick_off_team == SPL_TEAM_BLUE) ? TEAM_CYAN : TEAM_MAGENTA);
119 case SPL_STATE_PLAYING:
121 (msg->
kick_off_team == SPL_TEAM_BLUE) ? TEAM_CYAN : TEAM_MAGENTA);
123 case SPL_STATE_FINISHED:
139 for (
unsigned int i = 0; i < MAX_NUM_PLAYERS; ++i) {
159 size_t bytes_read = __s->
recv((
void *)&ctrlmsg,
sizeof(ctrlmsg));
160 if ( bytes_read ==
sizeof(ctrlmsg) ) {
161 if ( (strncmp(ctrlmsg.
header, SPL_GAMECONTROL_HEADER, GCHS) == 0) &&
162 (ctrlmsg.
version == SPL_STRUCT_VERSION) ) {
163 process_struct(&ctrlmsg);
165 printf(
"Received illegal package\n");