Repository navigation
Expand file tree
/
Copy pathautomatedreferee.cpp
More file actions
93 lines (79 loc) · 2.27 KB
/
Copy pathautomatedreferee.cpp
File metadata and controls
93 lines (79 loc) · 2.27 KB
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
#include "automatedreferee.h"
#include <QDebug>
CAutomatedReferee::CAutomatedReferee(QObject *parent) :
QObject(parent)
{
info.cmd = 0;
info.cmd_counter = 0;
info.goals_blue = 0;
info.goals_yellow = 0;
info.time_remaining = 0;
}
CAutomatedReferee::~CAutomatedReferee()
{
}
void CAutomatedReferee::close()
{
mc.close();
}
bool CAutomatedReferee::open() {
close();
if(!mc.open(_port,true,true)) {
debug(QString("[Automated Referee] Unable to open UDP network port: %1").arg(_port), D_GAME, QColor("red"));
return(false);
}
Net::Address multiaddr,interface;
multiaddr.setHost(_net_address.toLocal8Bit().data(),_port);
if(_net_interface.length() > 0){
interface.setHost(_net_interface.toLocal8Bit().data(),_port);
}else{
interface.setAny();
}
if(!mc.addMulticast(multiaddr,interface)) {
debug(QString("[Automated Referee] Unable to setup UDP multicast."),D_GAME,QColor("orange"));
}
debug(QString("[Automated Referee] UDP network successfully configured. (Multicast address: %1:%2)").arg(_net_address).arg(_port),D_MANI,QColor("green"));
return(true);
}
char* CAutomatedReferee::generatePacket()
{
char buffer[6];
buffer[0] = info.cmd;
buffer[1] = info.cmd_counter;
buffer[2] = info.goals_blue;
buffer[3] = info.goals_yellow;
buffer[4] = (unsigned char) (info.time_remaining) & 0x00FF;
buffer[5] = (unsigned char) (info.time_remaining >> 8) & 0x00FF;
return buffer;
}
bool CAutomatedReferee::send(char command)
{
Net::Address multiaddr;
if (command != info.cmd)
{
info.cmd = command;
info.cmd_counter++;
if (info.cmd_counter > 255)
{
info.cmd_counter = 0;
}
}
char data[6];
memcpy(data, generatePacket(), 6);
multiaddr.setHost(_net_address.toLocal8Bit().data(),_port);
bool result;
result=mc.send(data, 6, multiaddr);
if (result==false) {
debug(QString("[Automated Referee] Sending UDP datagram failed."),D_GAME,QColor("red"));
}
return(result);
}
void CAutomatedReferee::reConfigure(int port, QString net_address, QString net_interface)
{
this->close();
// qDebug() << port << net_address;
_port = port;
_net_address=net_address;
_net_interface=net_interface;
this->open();
}