mirror of https://github.com/SeanOMik/libki.git
protocol: Implement control messages
This commit is contained in:
parent
9653475ed9
commit
915b6e7e0a
|
@ -15,14 +15,14 @@ namespace control
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ClientHello(uint16_t session_id = 0,
|
ClientHello(uint16_t session_id = 0,
|
||||||
uint64_t timestamp = 0, uint32_t milliseconds = 0);
|
uint32_t timestamp = 0, uint32_t milliseconds = 0);
|
||||||
virtual ~ClientHello() = default;
|
virtual ~ClientHello() = default;
|
||||||
|
|
||||||
uint16_t get_session_id() const;
|
uint16_t get_session_id() const;
|
||||||
void set_session_id(uint16_t session_id);
|
void set_session_id(uint16_t session_id);
|
||||||
|
|
||||||
uint64_t get_timestamp() const;
|
uint32_t get_timestamp() const;
|
||||||
void set_timestamp(uint64_t timestamp);
|
void set_timestamp(uint32_t timestamp);
|
||||||
|
|
||||||
uint32_t get_milliseconds() const;
|
uint32_t get_milliseconds() const;
|
||||||
void set_milliseconds(uint32_t milliseconds);
|
void set_milliseconds(uint32_t milliseconds);
|
||||||
|
@ -32,16 +32,10 @@ namespace control
|
||||||
size_t get_size() const override final;
|
size_t get_size() const override final;
|
||||||
|
|
||||||
static Packet *create_packet(uint16_t session_id = 0,
|
static Packet *create_packet(uint16_t session_id = 0,
|
||||||
uint64_t timestamp = 0, uint32_t milliseconds = 0)
|
uint32_t timestamp = 0, uint32_t milliseconds = 0);
|
||||||
{
|
|
||||||
ClientHello data(session_id, timestamp, milliseconds);
|
|
||||||
auto *packet = new Packet(true, (uint8_t)Opcode::CLIENT_HELLO);
|
|
||||||
packet->set_payload_data(data);
|
|
||||||
return packet;
|
|
||||||
}
|
|
||||||
private:
|
private:
|
||||||
uint16_t m_session_id;
|
uint16_t m_session_id;
|
||||||
uint64_t m_timestamp;
|
uint32_t m_timestamp;
|
||||||
uint32_t m_milliseconds;
|
uint32_t m_milliseconds;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,14 +32,7 @@ namespace control
|
||||||
|
|
||||||
static Packet *create_packet(uint16_t session_id = 0,
|
static Packet *create_packet(uint16_t session_id = 0,
|
||||||
uint16_t milliseconds = 0, uint8_t minutes = 0,
|
uint16_t milliseconds = 0, uint8_t minutes = 0,
|
||||||
bool response = false)
|
bool response = false);
|
||||||
{
|
|
||||||
Ping data(session_id, milliseconds, minutes);
|
|
||||||
auto *packet = new Packet(true,
|
|
||||||
(uint8_t)(response ? Opcode::PING_RSP : Opcode::PING));
|
|
||||||
packet->set_payload_data(data);
|
|
||||||
return packet;
|
|
||||||
}
|
|
||||||
private:
|
private:
|
||||||
uint16_t m_session_id;
|
uint16_t m_session_id;
|
||||||
uint16_t m_milliseconds;
|
uint16_t m_milliseconds;
|
||||||
|
|
|
@ -15,14 +15,14 @@ namespace control
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ServerHello(uint16_t session_id = 0,
|
ServerHello(uint16_t session_id = 0,
|
||||||
uint64_t timestamp = 0, uint32_t milliseconds = 0);
|
uint32_t timestamp = 0, uint32_t milliseconds = 0);
|
||||||
virtual ~ServerHello() = default;
|
virtual ~ServerHello() = default;
|
||||||
|
|
||||||
uint16_t get_session_id() const;
|
uint16_t get_session_id() const;
|
||||||
void set_session_id(uint16_t session_id);
|
void set_session_id(uint16_t session_id);
|
||||||
|
|
||||||
uint64_t get_timestamp() const;
|
uint32_t get_timestamp() const;
|
||||||
void set_timestamp(uint64_t timestamp);
|
void set_timestamp(uint32_t timestamp);
|
||||||
|
|
||||||
uint32_t get_milliseconds() const;
|
uint32_t get_milliseconds() const;
|
||||||
void set_milliseconds(uint32_t milliseconds);
|
void set_milliseconds(uint32_t milliseconds);
|
||||||
|
@ -32,16 +32,10 @@ namespace control
|
||||||
size_t get_size() const override final;
|
size_t get_size() const override final;
|
||||||
|
|
||||||
static Packet *create_packet(uint16_t session_id = 0,
|
static Packet *create_packet(uint16_t session_id = 0,
|
||||||
uint64_t timestamp = 0, uint32_t milliseconds = 0)
|
uint32_t timestamp = 0, uint32_t milliseconds = 0);
|
||||||
{
|
|
||||||
ServerHello data(session_id, timestamp, milliseconds);
|
|
||||||
auto *packet = new Packet(true, (uint8_t)Opcode::SERVER_HELLO);
|
|
||||||
packet->set_payload_data(data);
|
|
||||||
return packet;
|
|
||||||
}
|
|
||||||
private:
|
private:
|
||||||
uint16_t m_session_id;
|
uint16_t m_session_id;
|
||||||
uint64_t m_timestamp;
|
uint32_t m_timestamp;
|
||||||
uint32_t m_milliseconds;
|
uint32_t m_milliseconds;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
#include "ki/protocol/control/ClientHello.h"
|
#include "ki/protocol/control/ClientHello.h"
|
||||||
|
#include "ki/dml/Record.h"
|
||||||
|
|
||||||
namespace ki
|
namespace ki
|
||||||
{
|
{
|
||||||
|
@ -6,7 +7,85 @@ namespace protocol
|
||||||
{
|
{
|
||||||
namespace control
|
namespace control
|
||||||
{
|
{
|
||||||
|
ClientHello::ClientHello(uint16_t session_id,
|
||||||
|
uint32_t timestamp, uint32_t milliseconds)
|
||||||
|
{
|
||||||
|
m_session_id = session_id;
|
||||||
|
m_timestamp = timestamp;
|
||||||
|
m_milliseconds = milliseconds;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint16_t ClientHello::get_session_id() const
|
||||||
|
{
|
||||||
|
return m_session_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ClientHello::set_session_id(uint16_t session_id)
|
||||||
|
{
|
||||||
|
m_session_id = session_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t ClientHello::get_timestamp() const
|
||||||
|
{
|
||||||
|
return m_timestamp;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ClientHello::set_timestamp(uint32_t timestamp)
|
||||||
|
{
|
||||||
|
m_timestamp = timestamp;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t ClientHello::get_milliseconds() const
|
||||||
|
{
|
||||||
|
return m_milliseconds;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ClientHello::set_milliseconds(uint32_t milliseconds)
|
||||||
|
{
|
||||||
|
m_milliseconds = milliseconds;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ClientHello::write_to(std::ostream& ostream) const
|
||||||
|
{
|
||||||
|
dml::Record record;
|
||||||
|
record.add_field<dml::USHRT>("unknown");
|
||||||
|
record.add_field<dml::UINT>("unknown2");
|
||||||
|
record.add_field<dml::UINT>("m_timestamp")->set_value(m_timestamp);
|
||||||
|
record.add_field<dml::UINT>("m_milliseconds")->set_value(m_milliseconds);
|
||||||
|
record.add_field<dml::USHRT>("m_session_id")->set_value(m_session_id);
|
||||||
|
record.write_to(ostream);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ClientHello::read_from(std::istream& istream)
|
||||||
|
{
|
||||||
|
dml::Record record;
|
||||||
|
record.add_field<dml::USHRT>("unknown");
|
||||||
|
record.add_field<dml::UINT>("unknown2");
|
||||||
|
auto *timestamp = record.add_field<dml::UINT>("m_timestamp");
|
||||||
|
auto *milliseconds = record.add_field<dml::UINT>("m_milliseconds");
|
||||||
|
auto *session_id = record.add_field<dml::USHRT>("m_session_id");
|
||||||
|
record.read_from(istream);
|
||||||
|
|
||||||
|
m_timestamp = timestamp->get_value();
|
||||||
|
m_milliseconds = milliseconds->get_value();
|
||||||
|
m_session_id = session_id->get_value();
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t ClientHello::get_size() const
|
||||||
|
{
|
||||||
|
return sizeof(dml::USHRT) + sizeof(dml::UINT) +
|
||||||
|
sizeof(dml::UINT) + sizeof(dml::UINT) +
|
||||||
|
sizeof(dml::USHRT);
|
||||||
|
}
|
||||||
|
|
||||||
|
Packet *ClientHello::create_packet(uint16_t session_id,
|
||||||
|
uint32_t timestamp, uint32_t milliseconds)
|
||||||
|
{
|
||||||
|
const ClientHello data(session_id, timestamp, milliseconds);
|
||||||
|
auto *packet = new Packet(true, (uint8_t)Opcode::CLIENT_HELLO);
|
||||||
|
packet->set_payload_data(data);
|
||||||
|
return packet;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -1,4 +1,5 @@
|
||||||
#include "ki/protocol/control/Ping.h"
|
#include "ki/protocol/control/Ping.h"
|
||||||
|
#include "ki/dml/Record.h"
|
||||||
|
|
||||||
namespace ki
|
namespace ki
|
||||||
{
|
{
|
||||||
|
@ -6,7 +7,80 @@ namespace protocol
|
||||||
{
|
{
|
||||||
namespace control
|
namespace control
|
||||||
{
|
{
|
||||||
|
Ping::Ping(uint16_t session_id, uint16_t milliseconds, uint8_t minutes)
|
||||||
|
{
|
||||||
|
m_session_id = session_id;
|
||||||
|
m_milliseconds = milliseconds;
|
||||||
|
m_minutes = minutes;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint16_t Ping::get_session_id() const
|
||||||
|
{
|
||||||
|
return m_session_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Ping::set_session_id(uint16_t session_id)
|
||||||
|
{
|
||||||
|
m_session_id = session_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint16_t Ping::get_milliseconds() const
|
||||||
|
{
|
||||||
|
return m_milliseconds;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Ping::set_milliseconds(uint16_t milliseconds)
|
||||||
|
{
|
||||||
|
m_milliseconds = milliseconds;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t Ping::get_minutes() const
|
||||||
|
{
|
||||||
|
return m_minutes;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Ping::set_minutes(uint8_t minutes)
|
||||||
|
{
|
||||||
|
m_minutes = minutes;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Ping::write_to(std::ostream &ostream) const
|
||||||
|
{
|
||||||
|
dml::Record record;
|
||||||
|
record.add_field<dml::USHRT>("m_session_id")->set_value(m_session_id);
|
||||||
|
record.add_field<dml::USHRT>("m_milliseconds")->set_value(m_milliseconds);
|
||||||
|
record.add_field<dml::UBYT>("m_minutes")->set_value(m_minutes);
|
||||||
|
record.write_to(ostream);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Ping::read_from(std::istream &istream)
|
||||||
|
{
|
||||||
|
dml::Record record;
|
||||||
|
auto *session_id = record.add_field<dml::USHRT>("m_session_id");
|
||||||
|
auto *milliseconds = record.add_field<dml::USHRT>("m_milliseconds");
|
||||||
|
auto *minutes = record.add_field<dml::UBYT>("m_minutes");
|
||||||
|
record.read_from(istream);
|
||||||
|
|
||||||
|
m_session_id = session_id->get_value();
|
||||||
|
m_milliseconds = milliseconds->get_value();
|
||||||
|
m_minutes = minutes->get_value();
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t Ping::get_size() const
|
||||||
|
{
|
||||||
|
return sizeof(dml::USHRT) + sizeof(dml::USHRT) +
|
||||||
|
sizeof(dml::UBYT);
|
||||||
|
}
|
||||||
|
|
||||||
|
Packet* Ping::create_packet(uint16_t session_id,
|
||||||
|
uint16_t milliseconds, uint8_t minutes, bool response)
|
||||||
|
{
|
||||||
|
const Ping data(session_id, milliseconds, minutes);
|
||||||
|
auto *packet = new Packet(true,
|
||||||
|
(uint8_t)(response ? Opcode::PING_RSP : Opcode::PING));
|
||||||
|
packet->set_payload_data(data);
|
||||||
|
return packet;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -1,4 +1,5 @@
|
||||||
#include "ki/protocol/control/ServerHello.h"
|
#include "ki/protocol/control/ServerHello.h"
|
||||||
|
#include "ki/dml/Record.h"
|
||||||
|
|
||||||
namespace ki
|
namespace ki
|
||||||
{
|
{
|
||||||
|
@ -6,7 +7,82 @@ namespace protocol
|
||||||
{
|
{
|
||||||
namespace control
|
namespace control
|
||||||
{
|
{
|
||||||
|
ServerHello::ServerHello(uint16_t session_id,
|
||||||
|
uint32_t timestamp, uint32_t milliseconds)
|
||||||
|
{
|
||||||
|
m_session_id = session_id;
|
||||||
|
m_timestamp = timestamp;
|
||||||
|
m_milliseconds = milliseconds;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint16_t ServerHello::get_session_id() const
|
||||||
|
{
|
||||||
|
return m_session_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ServerHello::set_session_id(uint16_t session_id)
|
||||||
|
{
|
||||||
|
m_session_id = session_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t ServerHello::get_timestamp() const
|
||||||
|
{
|
||||||
|
return m_timestamp;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ServerHello::set_timestamp(uint32_t timestamp)
|
||||||
|
{
|
||||||
|
m_timestamp = timestamp;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t ServerHello::get_milliseconds() const
|
||||||
|
{
|
||||||
|
return m_milliseconds;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ServerHello::set_milliseconds(uint32_t milliseconds)
|
||||||
|
{
|
||||||
|
m_milliseconds = milliseconds;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ServerHello::write_to(std::ostream& ostream) const
|
||||||
|
{
|
||||||
|
dml::Record record;
|
||||||
|
record.add_field<dml::USHRT>("m_session_id")->set_value(m_session_id);
|
||||||
|
record.add_field<dml::UINT>("unknown");
|
||||||
|
record.add_field<dml::UINT>("m_timestamp")->set_value(m_timestamp);
|
||||||
|
record.add_field<dml::UINT>("m_milliseconds")->set_value(m_milliseconds);
|
||||||
|
record.write_to(ostream);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ServerHello::read_from(std::istream& istream)
|
||||||
|
{
|
||||||
|
dml::Record record;
|
||||||
|
auto *session_id = record.add_field<dml::USHRT>("m_session_id");
|
||||||
|
record.add_field<dml::UINT>("unknown");
|
||||||
|
auto *timestamp = record.add_field<dml::UINT>("m_timestamp");
|
||||||
|
auto *milliseconds = record.add_field<dml::UINT>("m_milliseconds");
|
||||||
|
record.read_from(istream);
|
||||||
|
|
||||||
|
m_session_id = session_id->get_value();
|
||||||
|
m_timestamp = timestamp->get_value();
|
||||||
|
m_milliseconds = milliseconds->get_value();
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t ServerHello::get_size() const
|
||||||
|
{
|
||||||
|
return sizeof(dml::USHRT) + sizeof(dml::GID) +
|
||||||
|
sizeof(dml::UINT);
|
||||||
|
}
|
||||||
|
|
||||||
|
Packet *ServerHello::create_packet(uint16_t session_id,
|
||||||
|
uint32_t timestamp, uint32_t milliseconds)
|
||||||
|
{
|
||||||
|
const ServerHello data(session_id, timestamp, milliseconds);
|
||||||
|
auto *packet = new Packet(true, (uint8_t)Opcode::SERVER_HELLO);
|
||||||
|
packet->set_payload_data(data);
|
||||||
|
return packet;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue