-
Notifications
You must be signed in to change notification settings - Fork 2
/
Packet.h
75 lines (65 loc) · 1.96 KB
/
Packet.h
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
// @Begin License@
// This file is part of Coldest.
//
// Coldest is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Coldest is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Coldest. If not, see <http://www.gnu.org/licenses/>.
//
// Copyright 2008-2012 Ben Nemec
// @End License@
#ifndef __PACKET_H
#define __PACKET_H
#include <string>
#include <sstream>
#include <SDL/SDL_net.h>
#include "logout.h"
using std::stringstream;
class Packet
{
public:
Packet(IPaddress* address = NULL);
Packet(IPaddress*, const string, const unsigned long num = 0, const bool needack = false);
template <typename T>
Packet& operator<<(const T&);
template <typename T>
Packet& operator<<(T&);
size_t Send(UDPpacket*, UDPsocket&);
IPaddress addr;
string data;
unsigned long ack;
int attempts;
Uint32 sendtick, lastsent;
unsigned long sendinterval;
static int laghax;
};
// Need both a const and non-const version of this function.
// The full reasons are not clear to me, but I need to be able to pass in non-const objects
// (IDGen is nonsensical as a const object) and const built-ins such as 0 seem to require
// that there be a const version as well.
template <typename T>
Packet& Packet::operator<<(const T& s)
{
stringstream write;
write << s;
data += write.str();
return *this;
}
template <typename T>
Packet& Packet::operator<<(T& s)
{
stringstream write;
write << s;
data += write.str();
return *this;
}
const char eol = '\n';
#endif