Ping ser
a fake serializer for minip
- TODO John: add a serializer for the ping message
object ping_ser = {}
<<< member
class `ping_ser`;
>>>
<<< impl
class `ping_ser` : public ivy_binary_ser_128 {
enum {ping_s_init,
ping_s_frame,
ping_s_time,
ping_s_payload} state;
long frame_type;
public:
ping_ser() : state(ping_s_init) {
}
virtual void set(int128_t res) {
/*
Permet de genere un message ping avec les champs definit dans "res"
La valeur dans res est dirctement extraite par Ivy et son solveur
Typiquement les nombres
*/
switch (state) {
case ping_s_init:
{
state = ping_s_payload;
}
break;
case ping_s_frame:
{
setn(res,1);
}
break;
case ping_s_time:
{
setn(res, 8);
}
break;
default:
std::cerr << "deser_err 42 " << "\n";
throw deser_err();
}
}
virtual void open_tag(int tag, const std::string &) {
/*
Permet de set le state correspondant a un tag/type object precis
*/
if (state == ping_s_payload || state == ping_s_init) {
int sz = 1;
if (tag == 0) {
frame_type = 0x01;
state = ping_s_frame;
}
else if (tag == 1) {
state = ping_s_frame;
frame_type = 0x02;
}
else if (tag == 2) {
state = ping_s_time;
frame_type = 0x03;
}
else {
std::cerr << "saw frame tag " << tag << "\n";
throw deser_err();
}
setn(frame_type,sz);
return;
}
std::cerr << "deser_err 43 " << tag << "\n";
std::cerr << "deser_err 43 " << state << "\n";
throw deser_err();
}
virtual void open_list_elem() {
}
void open_list(int len) {
}
void close_list() {
if (state == ping_s_payload) {
state = ping_s_init;
}
}
void close_list_elem() {}
virtual void close_tag() {
state = ping_s_payload;
}
~ping_ser(){}
};
>>>