File: OSCStatsSender.h

package info (click to toggle)
spring 88.0%2Bdfsg1-1.1
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 41,524 kB
  • sloc: cpp: 343,114; ansic: 38,414; python: 12,257; java: 12,203; awk: 5,748; sh: 1,204; xml: 997; perl: 405; objc: 192; makefile: 181; php: 134; sed: 2
file content (66 lines) | stat: -rwxr-xr-x 1,761 bytes parent folder | download
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
/* This file is part of the Spring engine (GPL v2 or later), see LICENSE.html */

#ifndef _OSCSTATSSENDER_H_
#define _OSCSTATSSENDER_H_

const char* const OSC_MSG_TOPIC_INIT_TITLES  = "/spring/info/initial/titles";
const char* const OSC_MSG_TOPIC_INIT_VALUES  = "/spring/info/initial/values";
const char* const OSC_MSG_TOPIC_PLAYER_TITLES  = "/spring/stats/player/titles";
const char* const OSC_MSG_TOPIC_PLAYER_VALUES  = "/spring/stats/player/values";
const char* const OSC_MSG_TOPIC_TEAM_TITLES  = "/spring/stats/team/titles";
const char* const OSC_MSG_TOPIC_TEAM_VALUES  = "/spring/stats/team/values";

#include <string>

namespace osc { class OutboundPacketStream; }

class COSCStatsSender
{
private:
	COSCStatsSender(const std::string& dstAddress, unsigned int dstPort);
	~COSCStatsSender();

public:
	static COSCStatsSender* GetInstance();

	void SetEnabled(bool enabled);
	bool IsEnabled() const;

	bool SendInit();
	bool Update(int frameNum);

	void SetDestinationAddress(const std::string& address);
	const std::string& GetDestinationAddress() const;

	void SetDestinationPort(unsigned int port);
	unsigned int GetDestinationPort() const;

private:
	void UpdateDestination();
	bool IsTimeToSend(int frameNum);

	bool SendOscBuffer();

	bool SendInitialInfo();
	bool SendPlayerStatsTitles();
	bool SendPlayerStats();
	bool SendTeamStatsTitles();
	bool SendTeamStats();

private:
	static const unsigned int OSC_OUTPUT_BUFFER_SIZE = 16318; // 16KB
	static COSCStatsSender* singleton;

private:
	bool sendingEnabled;
	std::string dstAddress;
	unsigned int dstPort;
	struct NetStruct;
	NetStruct* network;
	char* oscOutputBuffer;
	osc::OutboundPacketStream* oscPacker;
};

#define oscStatsSender COSCStatsSender::GetInstance()

#endif // _OSCSTATSSENDER_H_