Ping ser

a fake serializer for minip

  1. 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(){}
    };

>>>