//my_json.h
#include"comm.h"
#include<iostream>
#include<string>
#include"json/json.h"
using namespace std;
class my_json
{
    public:
        my_json();
        ~my_json();
        static int serialize(Json::Value& in_val ,string& out_str);
        static int deserialize(string& in_out,Json::Value& out_val);
    private:
};
//my_json.cpp
#include"my_json.h"
my_json::my_json()
{}
int my_json::serialize(Json::Value& in_val ,string& out_str)
{
#ifdef    _FAST_JSON_
    Json::FastWriter write;
    out_str=write.write(in_val);
#else
    Json::StyledWriter write;
    out_str=write.write(in_val);
#endif
    return 0;
}
int my_json::deserialize(string& in_str,Json::Value& out_val)
{
    Json::Reader read;
    if(read.parse(in_str,out_val,false))
    {
    //    cout<<in_str<<endl;
        return 0;
    }
    return -1;    
}
my_json::~my_json()
{}
//udp_data.h
#pragma once
#include"comm.h"
#include"my_json.h"
#include<iostream>
using namespace std;
class udp_data
{
    public:
        udp_data();
        void data_to_string(string& _in_name,string& _in_msg,string& _in_school,string _in_cmd,string& _out_str);
        void data_to_value(string& _out_name,string& _out_msg,string& _out_school,string& _out_cmd,string& _in_str);
        ~udp_data();
    public:
        string nick_name;
        string msg;
        string school;
        string cmd;
};
//udp_data.cpp
#include"udp_data.h"
udp_data::udp_data()
{}
void udp_data::data_to_string(string& _in_name,string& _in_msg,string& _in_school,string _in_cmd,string& _out_str)
{
    nick_name=_in_name;
    msg=_in_msg;
    school=_in_school;
    cmd=_in_cmd;
    Json::Value root;
    root["nick_name"]=nick_name;
    root["msg"]=msg;
    root["school"]=school;
    root["cmd"]=cmd;
    my_json::serialize(root,_out_str);
//    cout<<_in_name<<endl;
//    cout<<_out_str<<endl;
}
void udp_data::data_to_value(string& _out_name,string& _out_msg,string& _out_school,string& _out_cmd,string& _in_str)
{
    Json::Value root;
    my_json::deserialize(_in_str,root);
    _out_name=root["nick_name"].asString();
//    cout<<_out_name<<endl;
    _out_msg=root["msg"].asString();
//    cout<<_out_msg<<endl;
    _out_school=root["school"].asString();
    _out_cmd=root["cmd"].asString();
    nick_name=_out_name;
    msg=_out_msg;
    school=_out_school;
    cmd=_out_cmd;
//    cout<<cmd;
}

udp_data::~udp_data()
{}


//int main()
//{
//    udp_data ud;
//    string _name;
////    cout<<"please input name: ";
////    cin>>_name;
//    string _msg;
////    cout<<"please input msg: ";
////    cin>>_msg;
//    string _school;
////    cout<<"please input school: ";
////    cin>>_school;
//    string _cmd;
////    cout<<"please input cmd: ";
////    cin>>_cmd;
//    string _out="{\"cmd\":\"None\",\"msg\":\"hello\",\"nick_name\":\"rz\",\"school\":\"xpu\"}";
////    _name="rz";
////    ud.data_to_string(_name,_msg,_school,_cmd,_out);
////    _name="";
//    ud.data_to_value(_name,_msg,_school,_cmd,_out);
////    cout<<_out<<endl;
//    cout<<_name<<endl;
//    cout<<_msg<<endl;
//    cout<<_school<<endl;
//    cout<<_cmd<<endl;
//    return 0;
//}
//Makefile
ROOT_PATH=$(shell pwd)
INCLUDE=-I../lib/include

LIB=#-L$(ROOT_PATH)/lib/lib

.PHONY:all
all:udp_data

udp_data:udp_data.o my_json.o
    g++ -o $@ $^ /home/xiaozhi/LinuxStudy/project_2/lib/lib/libjsoncpp.a

udp_data.o:udp_data.cpp
    g++ -c $< $(INCLUDE)

my_json.o:my_json.cpp
    g++ -c $< $(INCLUDE) -D _FAST_JSON_
.PHONY:clean
clean:
    rm -f udp_data my_json *.o