File: Connection.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 (121 lines) | stat: -rwxr-xr-x 4,755 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
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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
/* This file is part of the Spring engine (GPL v2 or later), see LICENSE.html */

#ifndef CONNECTION_H
#define CONNECTION_H

#include <boost/asio/streambuf.hpp>
#include <boost/asio/deadline_timer.hpp>
#include <boost/asio/ip/tcp.hpp>
#include <string>
#include <list>

struct ClientStatus
{
	ClientStatus()
	: ingame(false)
	, away(false)
	, rank(0)
	, moderator(false)
	, bot(false)
	{}

	bool ingame;
	bool away;
	int rank;
	bool moderator;
	bool bot;
};

class Connection
{
public:
	Connection();
	virtual ~Connection();

	void Connect(const std::string& server, int port);
	void Disconnect();
	virtual void DoneConnecting(bool succes, const std::string& err) {};
	virtual void ServerGreeting(const std::string& serverVer, const std::string& springVer, int udpport, int mode) {};

	void Register(const std::string& name, const std::string& password);
	virtual void RegisterDenied(const std::string& reason) {};
	virtual void RegisterAccepted() {};

	void Login(const std::string& name, const std::string& password);
	virtual void LoginDenied(const std::string& reason) {};
	virtual void LoginEnd() {};
	virtual void Aggreement(const std::string& text) {};
	void ConfirmAggreement();

	void Rename(const std::string& newName);
	void ChangePass(const std::string& oldpass, const std::string& newpass);

	virtual void Motd(const std::string& text) {};
	virtual void ServerMessage(const std::string& text) {};
	virtual void ServerMessageBox(const std::string& text, const std::string& url) {};

	virtual void AddUser(const std::string& name, const std::string& country, int cpu) {};
	virtual void RemoveUser(const std::string& name) {};
	void StatusUpdate(bool ingame, bool away);
	virtual void UserStatusUpdate(const std::string& name, ClientStatus status) {};

	void Channels();
	virtual void ChannelInfo(const std::string& channel, unsigned users) {};
	virtual void ChannelInfoEnd() {};

	void RequestMutelist(const std::string& channel);
	virtual void Mutelist(const std::string& channel, std::list<std::string> list) {};

	void JoinChannel(const std::string& channame, const std::string& password = "");
	virtual void Joined(const std::string& channame) {};
	virtual void ChannelMember(const std::string& channame, const std::string& name, bool joined) {};
	virtual void ChannelMemberLeft(const std::string& channame, const std::string& name, const std::string& reason) {};
	virtual void JoinFailed(const std::string& channame, const std::string& reason) {};
	void LeaveChannel(const std::string& channame);
	void KickChannelMember(const std::string& channame, const std::string& user, const std::string& reason);
	virtual void ChannelMemberKicked(const std::string& channame, const std::string& user, const std::string& reason) {};

	void ChangeTopic(const std::string& channame, const std::string& topic);
	virtual void ChannelTopic(const std::string& channame, const std::string& author, long unsigned time, const std::string& topic) {};
	virtual void ChannelMessage(const std::string& channel, const std::string& text) {};

	void Say(const std::string& channel, const std::string& text);
	void SayEx(const std::string& channel, const std::string& text);
	void SayPrivate(const std::string& user, const std::string& text);
	virtual void Said(const std::string& channel, const std::string& user, const std::string& text) {};
	virtual void SaidEx(const std::string& channel, const std::string& user, const std::string& text) {};
	virtual void SaidPrivate(const std::string& user, const std::string& text) {};

	virtual void BattleOpened(int id, bool replay, bool natTraversal, const std::string& founder, const std::string& hostIp, int port, int maxplayers, bool password, int rank, unsigned maphash, const std::string& title, const std::string& map, const std::string& mod) {};
	virtual void BattleUpdated(int id, int numSpectators, bool locked, unsigned maphash, const std::string& map) {};
	virtual void BattleClosed(int id) {};

	virtual void Disconnected() {};
	virtual void NetworkError(const std::string& msg) {};

	void Ping();
	void SendData(const std::string& msg);

	void Poll();
	void Run();

private:
	void DataReceived(const std::string& command, const std::string& msg);

	void ConnectCallback(const boost::system::error_code& error);
	void ReceiveCallback(const boost::system::error_code& error, size_t bytes);
	void SendCallback(const boost::system::error_code& error);
	static std::string RTFToPlain(const std::string& rich);

	boost::asio::io_service netservice;
	std::string aggreementbuf;
	std::string inMutelistChannel;
	std::list<std::string> mutelistBuf;
	boost::asio::ip::tcp::socket sock;
	boost::asio::streambuf incomeBuffer;
	boost::asio::deadline_timer timer;
	std::string myUserName;
	ClientStatus myStatus;
};

#endif