summaryrefslogtreecommitdiffstats
path: root/src/Net/Packet.h
diff options
context:
space:
mode:
authorMatthias Schiffer <matthias@gamezock.de>2008-06-12 14:58:33 +0200
committerMatthias Schiffer <matthias@gamezock.de>2008-06-12 14:58:33 +0200
commit5679977b5d22e22be9e4c47c4a3dcab90c1bc5a4 (patch)
tree947df8f82a46e978fd7e69df079df9eaf6d2f357 /src/Net/Packet.h
parent99ec36989631dd116524a5fab03f1c1977870752 (diff)
downloadmad-5679977b5d22e22be9e4c47c4a3dcab90c1bc5a4.tar
mad-5679977b5d22e22be9e4c47c4a3dcab90c1bc5a4.zip
Das Versenden von Paketen ist jetzt m?glich
Diffstat (limited to 'src/Net/Packet.h')
-rw-r--r--src/Net/Packet.h102
1 files changed, 102 insertions, 0 deletions
diff --git a/src/Net/Packet.h b/src/Net/Packet.h
new file mode 100644
index 0000000..28dcb86
--- /dev/null
+++ b/src/Net/Packet.h
@@ -0,0 +1,102 @@
+/*
+ * Packet.h
+ *
+ * Copyright (C) 2008 Matthias Schiffer <matthias@gamezock.de>
+ *
+ * This program 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.
+ *
+ * This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef MAD_NET_PACKET_H_
+#define MAD_NET_PACKET_H_
+
+#include <cstdlib>
+#include <cstring>
+
+namespace Mad {
+namespace Net {
+
+class Packet {
+ public:
+ struct Data {
+ unsigned short type;
+ unsigned short requestId;
+ unsigned long length;
+ unsigned char data[0];
+ };
+
+ protected:
+ Data *rawData;
+
+ public:
+ Packet(unsigned short type, unsigned short requestId, void *data = NULL, unsigned long length = 0) {
+ rawData = (Data*)std::malloc(sizeof(Data)+length);
+
+ rawData->type = type;
+ rawData->requestId = requestId;
+ rawData->length = length;
+
+ if(length)
+ std::memcpy(rawData->data, data, length);
+ }
+
+ Packet(const Packet &p) {
+ rawData = (Data*)std::malloc(p.getRawDataLength());
+ std::memcpy(rawData, p.rawData, p.getRawDataLength());
+ }
+
+ Packet& operator=(Packet &p) {
+ if(&p == this)
+ return *this;
+
+ std::free(rawData);
+
+ rawData = (Data*)std::malloc(p.getRawDataLength());
+ std::memcpy(rawData, p.rawData, p.getRawDataLength());
+
+ return *this;
+ }
+
+ virtual ~Packet() {
+ std::free(rawData);
+ }
+
+ unsigned short getType() const {
+ return rawData->type;
+ }
+
+ unsigned short getRequestId() const {
+ return rawData->requestId;
+ }
+
+ unsigned long getLength() const {
+ return rawData->length;
+ }
+
+ const unsigned char* getData() const {
+ return rawData->data;
+ }
+
+ const Data* getRawData() const {
+ return rawData;
+ }
+
+ unsigned long getRawDataLength() const {
+ return sizeof(Data) + rawData->length;
+ }
+};
+
+}
+}
+
+#endif /*MAD_NET_PACKET_H_*/