summaryrefslogtreecommitdiff
path: root/common/message.cpp
blob: 6e1901d2098f6eb74d79d120696b331dc8b3dd7a (plain)
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
#include "message.h"

#include <stdexcept>
#include <cstring>

#include <iostream>

Message::Hello::Hello() : Base(Types::Hello) {
	
}

Message::Hello::Hello(const std::string& v) : Base(Types::Hello), version(v) {
	
}

std::pair<uint8_t*, std::size_t> Message::Hello::serialize() {
	std::size_t s = version.size();
	uint8_t* buf = new uint8_t[s];
	
	memcpy(buf, version.c_str(), version.size());
	
	return std::pair<uint8_t*, std::size_t>(buf, s);
}

void Message::Hello::deserialize(uint8_t* data, std::size_t bytes) {
	version = std::string((char*)data, bytes);
}

Message::Login::Login() : Base(Types::Login) {
	
}

Message::Login::Login(const std::string& n) : Base(Types::Login), nick(n) {
	
}

std::pair<uint8_t*, std::size_t> Message::Login::serialize() {
	std::size_t s = nick.size();
	uint8_t* buf = new uint8_t[s];
	
	memcpy(buf, nick.c_str(), nick.size());
	
	return std::pair<uint8_t*, std::size_t>(buf, s);
}

void Message::Login::deserialize(uint8_t* data, std::size_t bytes) {
	nick = std::string((char*)data, bytes);
}

Message::LoginResponse::LoginResponse() : Base(Types::LoginResponse) {

}

Message::LoginResponse::LoginResponse(bool ok) : Base(Types::LoginResponse), login_ok(ok) {
	
}

std::pair<uint8_t*, std::size_t> Message::LoginResponse::serialize() {
	uint8_t* buf = new uint8_t[1];
	
	buf[1] = uint8_t(login_ok);
	
	return std::pair<uint8_t*, std::size_t>(buf, 1);
}

void Message::LoginResponse::deserialize(uint8_t* data, std::size_t bytes) {
	login_ok = bool(data[0]);
}