refactor bitfield io
This commit is contained in:
@@ -12,7 +12,7 @@
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
|
||||
enum class PacketID { KeepAlive = 0, MDC = 1 };
|
||||
enum class PacketID : std::uint8_t { KeepAlive = 0, MDC = 1 };
|
||||
|
||||
class PacketHandler;
|
||||
|
||||
@@ -26,8 +26,13 @@ struct KeepAlivePacket {
|
||||
sp::BitField<std::uint16_t, 4> two;
|
||||
};
|
||||
|
||||
struct MDCPacket {
|
||||
sp::BitField<std::uint16_t, 12> one;
|
||||
sp::BitField<PacketID, 4> two;
|
||||
};
|
||||
|
||||
using KeepAliveMessage = Message<KeepAlivePacket, PacketID::KeepAlive>;
|
||||
using MDCMessage = Message<KeepAlivePacket, PacketID::MDC>;
|
||||
using MDCMessage = Message<MDCPacket, PacketID::MDC>;
|
||||
|
||||
using AllMessages = std::tuple<KeepAliveMessage, MDCMessage>;
|
||||
|
||||
@@ -39,7 +44,7 @@ class MyHandler : public PacketHandler {
|
||||
std::cout << "I recieved a keep alive : " << *msg->one << " : " << *msg->two << "\n";
|
||||
}
|
||||
virtual void Handle(const MDCMessage& msg) override {
|
||||
std::cout << "I recieved a keep alive : " << *msg->one << " : " << *msg->two << "\n";
|
||||
std::cout << "I recieved a mdc : " << *msg->one << " : " << static_cast<unsigned>(*msg->two) << "\n";
|
||||
}
|
||||
};
|
||||
|
||||
@@ -57,6 +62,7 @@ int main() {
|
||||
MyHandler h;
|
||||
PacketDispatcher d;
|
||||
d.RegisterHandler(PacketID::KeepAlive, &h);
|
||||
d.RegisterHandler(PacketID::MDC, &h);
|
||||
d.Dispatch(m);
|
||||
PacketFactory f;
|
||||
auto message = f.CreateMessage(PacketID::KeepAlive);
|
||||
@@ -73,6 +79,7 @@ int main() {
|
||||
PacketStream p(std::make_shared<sp::StdOuput>(file));
|
||||
|
||||
p.WriteMessage(m);
|
||||
p.WriteMessage(MDCMessage{42, PacketID::MDC});
|
||||
|
||||
file.flush();
|
||||
|
||||
@@ -81,10 +88,10 @@ int main() {
|
||||
PacketStream p2(std::make_shared<sp::StdInput>(file2));
|
||||
|
||||
auto message2 = p2.ReadMessage();
|
||||
auto message3 = p2.ReadMessage();
|
||||
|
||||
d.Dispatch(*message2);
|
||||
|
||||
// Todo : verify bitfields
|
||||
d.Dispatch(*message3);
|
||||
|
||||
// message->Write(file);
|
||||
// file << std::endl;
|
||||
|
||||
Reference in New Issue
Block a user