MD5JSON.h
#pragma once
#include "include/json/json.h"
#include "include/md5/md5.h"
#include "xml/tinyxml/tinystr.h"
#include "xml/tinyxml/tinyxml.h"
#include
using namespace std;
#pragma comment(lib,"md5_JSON\\include\\bin\\json_vc71_libmtd.lib")
#define MJ MD5JSON::getInstance()
#define JSON Json
#define XM XML::getInstance()
// //多线程调试 (/MTd)
class MD5JSON
{
//md5
md5_state_t m_context;
unsigned char m_Digest[16];
char m_outstr[256];
//json
char *buf;
Json::Reader reader;
Json::Value root;
string m_jsonfilename;
Json::Value jsonItem;
public:
///////////////////////// MD5
static MD5JSON *getInstance();
bool setmd5(const char \*data);
bool setmd5(const char \*data, char \*buffer, int bufferLen);
bool setmd5(const char \*data, int datalen);
bool setmd5(string data);
bool setmd5(string data, char \*buffer, int bufferLen);
void print();
void print(char \*data);
void print(string data);
void print(const char \*data);
char \*getmd5() { return m\_outstr; }
public:
///////////////////////// JSON
bool createJSONFile(const char *filename);
bool createJSONFile(string filename);
string getFileName() { return m_jsonfilename; }
Json::Value getRoot() { return this->root; }
Json::Value getItem() { return this->jsonItem; }
bool readJSONFile(const char *filename);
bool readJSONFile(string filename);
//直接写入文件
bool insertData(const char *data);
//json 方法写入并baocun
bool insertData();
//如果相同则覆盖
//==================================================
bool addChild(const char *key,const char *value);
bool addChild(string key, string value);
//MD5JSON::insertData(); 内部已经调用
void addChildEnd();
//==================================================
char \*getJSONData() { return buf; }
//在加载文件时此函数就已经调用
bool parseJSON();
//这里只有在一个root下才有效
int get\_int(const char \*key);
string get\_string(const char \*key);
unsigned int get\_uint(const char \*key);
double get\_double(const char \*key);
bool get\_bool(const char \*key);
const char \*get\_const\_string(const char \*key);
//清楚整个文件数据
void clear();
//遍历
void ergodicObject(Json::Value::Members &object);
void ergodicObject(Json::Value &root, Json::Value::Members &object);
//数组遍历
void ergodicArray(Json::Value &root);
private:
//f30992da54715e5a0c4a7eaf29889641 //vico
MD5JSON()
{
this->m\_context = { 0 };
memset(this->m\_Digest, 0, sizeof(this->m\_Digest));
memset(this->m\_outstr, 0, sizeof(this->m\_outstr));
}
~MD5JSON()
{
if (buf)
{
delete\[\] buf;
buf = NULL;
}
}
};
class XML
{
string name;
TiXmlDocument* Doc;
public:
static XML *getInstance();
string setXMLName(string name);
bool createXML();
bool createXML(string name);
bool loadXML(string name);
//Accout Password
bool insert(string A, string P);
bool save();
bool saveToNewFile(string name);
//node 除非你知道在做什么
bool addChild(string node, string key, string value);
//Accout AccoutValue Password PasswordValue
bool addChild(string A, string AV,string P,string PV);
private:
XML();
~XML();
};
MD5JSON.cpp
#include "MD5JSON.h"
///////////////////////// MD5
MD5JSON *MD5JSON::getInstance()
{
static MD5JSON md5json;
return &md5json;
}
bool MD5JSON::setmd5(const char *data)
{
if (data)
{
md5_byte_t byteData[256] = { 0 };
memset(byteData, 0, sizeof(byteData));
int len = 0;
while (data[len])
{
byteData[len] = data[len];
len++;
}
/*
pms->abcd[1] = /*0xefcdab89 // T_MASK ^ 0x10325476;
pms->abcd[2] = /*0x98badcfe // T_MASK ^ 0x67452301;
*/
md5_init(&m_context);
md5_append(&m_context, byteData, len);
md5_finish(&m_context, m_Digest);
sprintf\_s(m\_outstr,
"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
m\_Digest\[0\], m\_Digest\[1\], m\_Digest\[2\], m\_Digest\[3\], m\_Digest\[4\], m\_Digest\[5\],
m\_Digest\[6\], m\_Digest\[7\], m\_Digest\[8\], m\_Digest\[9\], m\_Digest\[10\], m\_Digest\[11\],
m\_Digest\[12\], m\_Digest\[13\], m\_Digest\[14\], m\_Digest\[15\]);
return true;
}
return false;
}
bool MD5JSON::setmd5(const char *data, char *buffer, int bufferLen)
{
if (data && buffer && bufferLen)
{
md5_byte_t byteData[256] = { 0 };
memset(byteData, 0, sizeof(byteData));
int len = 0;
while (data[len])
{
byteData[len] = data[len];
len++;
}
/*
pms->abcd[1] = /*0xefcdab89 // T_MASK ^ 0x10325476;
pms->abcd[2] = /*0x98badcfe // T_MASK ^ 0x67452301;
*/
md5_init(&m_context);
md5_append(&m_context, byteData, len);
md5_finish(&m_context, m_Digest);
sprintf\_s(m\_outstr,
"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
m\_Digest\[0\], m\_Digest\[1\], m\_Digest\[2\], m\_Digest\[3\], m\_Digest\[4\], m\_Digest\[5\],
m\_Digest\[6\], m\_Digest\[7\], m\_Digest\[8\], m\_Digest\[9\], m\_Digest\[10\], m\_Digest\[11\],
m\_Digest\[12\], m\_Digest\[13\], m\_Digest\[14\], m\_Digest\[15\]);
strcpy\_s(buffer, bufferLen, m\_outstr);
return true;
}
return false;
}
bool MD5JSON::setmd5(const char *data, int datalen)
{
if (data && datalen)
{
md5_byte_t byteData[256] = { 0 };
memset(byteData, 0, sizeof(byteData));
while (data[datalen - 1])
{
byteData[datalen - 1] = data[datalen - 1];
datalen--;
}
/*
pms->abcd[1] = /*0xefcdab89 // T_MASK ^ 0x10325476;
pms->abcd[2] = /*0x98badcfe // T_MASK ^ 0x67452301;
*/
md5_init(&m_context);
md5_append(&m_context, byteData, datalen - 1);
md5_finish(&m_context, m_Digest);
sprintf\_s(m\_outstr,
"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
m\_Digest\[0\], m\_Digest\[1\], m\_Digest\[2\], m\_Digest\[3\], m\_Digest\[4\], m\_Digest\[5\],
m\_Digest\[6\], m\_Digest\[7\], m\_Digest\[8\], m\_Digest\[9\], m\_Digest\[10\], m\_Digest\[11\],
m\_Digest\[12\], m\_Digest\[13\], m\_Digest\[14\], m\_Digest\[15\]);
return true;
}
return false;
}
bool MD5JSON::setmd5(string data)
{
return MD5JSON::setmd5(data.c_str());
}
bool MD5JSON::setmd5(string data, char *buffer, int bufferLen)
{
return MD5JSON::setmd5(data.c_str(),buffer,bufferLen);
}
void MD5JSON::print()
{
printf("%s\n", m_outstr);
}
void MD5JSON::print(char *data)
{
printf("%s\n", data);
}
void MD5JSON::print(string data)
{
printf("%s\n", data.c_str());
}
void MD5JSON::print(const char *data)
{
printf("%s\n", data);
}
///////////////////////// JSON
bool MD5JSON::createJSONFile(const char *filename)
{
m_jsonfilename = filename;
FILE *File = NULL;
fopen_s(&File, filename, "wb");
if (File)
{
fclose(File);
File = NULL;
return true;
}
return false;
}
bool MD5JSON::createJSONFile(string filename)
{
return MD5JSON::createJSONFile(filename.c_str());
}
bool MD5JSON::readJSONFile(const char *filename)
{
m\_jsonfilename = filename;
FILE \*File = NULL;
fopen\_s(&File, filename, "rb");
if (File)
{
rewind(File);
//从0开始偏移到最后
fseek(File, 0, SEEK\_END);
int size = ftell(File);
//rewind(File);
//从0开始偏移到0的位置
fseek(File, 0, SEEK\_SET);
//文件当前读写位置
//fseek(File, 0, SEEK\_CUR);
buf = new char\[size + 1\];
int read = fread\_s(buf, size + 1, size, 1, File);
rewind(File);
fclose(File);
File = NULL;
return MD5JSON::parseJSON();
}
return false;
}
bool MD5JSON::readJSONFile(string filename)
{
return MD5JSON::readJSONFile(filename.c_str());
}
bool MD5JSON::insertData(const char *data)
{
FILE *File = NULL;
fopen_s(&File, this->m_jsonfilename.c_str(), "wb+");
if (File)
{
int len = strlen(data);
fwrite(data, len, 1, File);
fclose(File);
File = NULL;
return true;
}
return false;
}
bool MD5JSON::insertData()
{
return MJ->insertData(this->root.toStyledString().c_str());
}
bool MD5JSON::addChild(const char *key, const char *value)
{
if (key && value)
{
jsonItem[key] = value;
return true;
}
return false;
}
bool MD5JSON::addChild(string key, string value)
{
return MD5JSON::addChild(key.c_str(), value.c_str());
}
void MD5JSON::addChildEnd()
{
this->root.append(jsonItem);
MD5JSON::insertData();
}
bool MD5JSON::parseJSON()
{
if (this->reader.parse(MJ->getJSONData(), this->root))
{
Json::Value::Members member = this->root.getMemberNames();
MD5JSON::ergodicObject(this->root,member);
//int size\_i = member.size();
//for (int i = 0; i < size\_i; i++)
//{
// if (this->root\[member\[i\].c\_str()\].isObject())
// {
// Json::Value::Members temp = this->root\[member\[i\].c\_str()\].getMemberNames();
// MD5JSON::ergodicObject(this->root\[member\[i\].c\_str()\],temp);
// int size\_j = temp.size();
// for (int j = 0; j < size\_j; j++)
// {
// if ((this->root\[member\[i\].c\_str()\])\[temp\[j\].c\_str()\].isObject())
// {
// Json::Value::Members tmp = (this->root\[member\[i\].c\_str()\])\[temp\[j\].c\_str()\].getMemberNames();
// MD5JSON::ergodicObject(this->root\[member\[i\].c\_str()\]\[temp\[j\].c\_str()\],tmp);
// int size\_k = tmp.size();
// for (int k = 0; k < size\_k; k++)
// {
// if ((this->root\[member\[i\].c\_str()\])\[temp\[j\].c\_str()\]\[tmp\[k\].c\_str()\].isObject())
// {
// Json::Value::Members tm = ((this->root\[member\[i\].c\_str()\])\[temp\[j\].c\_str()\])\[tmp\[k\].c\_str()\].getMemberNames();
// MD5JSON::ergodicObject(this->root\[member\[i\].c\_str()\]\[temp\[j\].c\_str()\]\[tmp\[k\].c\_str()\], tm);
// int size\_n = tm.size();
// for (int n = 0; n < size\_n; n++)
// {
// if ((this->root\[member\[i\].c\_str()\])\[temp\[j\].c\_str()\]\[tmp\[k\].c\_str()\]\[tm\[n\].c\_str()\].isObject())
// {
// Json::Value::Members t = (((this->root\[member\[i\].c\_str()\])\[temp\[j\].c\_str()\])\[tmp\[k\].c\_str()\])\[tm\[n\].c\_str()\].getMemberNames();
// MD5JSON::ergodicObject(this->root\[member\[i\].c\_str()\]\[temp\[j\].c\_str()\]\[tmp\[k\].c\_str()\]\[tm\[n\].c\_str()\], t);
// }
// }
// }
// }
// }
// }
// }
//}
return true;
}
return false;
}
void MD5JSON::ergodicObject(Json::Value::Members &object)
{
int size = object.size();
for (int i = 0; i < size; i++)
{
std::cout << object[i] << std::endl;
}
}
void MD5JSON::ergodicObject(Json::Value &root, Json::Value::Members &object)
{
int size = object.size();
for (int i = 0; i < size; i++)
{
if (root[object[i].c_str()].isArray())
{
std::cout << "Key = " << object[i] << " , Value = Array"<< std::endl;
//遇到数组对象一直进行递归
MD5JSON::ergodicArray(root\[object\[i\].c\_str()\]);
}
else if (root\[object\[i\].c\_str()\].isBool())
{
std::cout << "Key = " << object\[i\] << " , Value = " << root\[object\[i\].c\_str()\].asBool() << std::endl;
}
else if (root\[object\[i\].c\_str()\].isDouble())
{
std::cout << "Key = " << object\[i\] << " , Value = " << root\[object\[i\].c\_str()\].asDouble() << std::endl;
}
else if (root\[object\[i\].c\_str()\].isInt())
{
std::cout << "Key = " << object\[i\] << " , Value = " << root\[object\[i\].c\_str()\].asInt() << std::endl;
}
else if (root\[object\[i\].c\_str()\].isString())
{
std::cout << "Key = " << object\[i\] << " , Value = ";
printf("%s\\n", root\[object\[i\].c\_str()\].asString().c\_str());
}
else if (root\[object\[i\].c\_str()\].isObject())
{
std::cout << "Key = " << object\[i\] << " , Value = Object"<< std::endl;
//遇到对象一直进行递归
Json::Value::Members tmp = root\[object\[i\].c\_str()\].getMemberNames();
MD5JSON::ergodicObject(root\[object\[i\].c\_str()\], tmp);
}
}
}
void MD5JSON::ergodicArray(Json::Value &root)
{
int size = root.size();
for (int i = 0; i < size; i++)
{
string str = root[i].toStyledString();
//printf("%s\n", str.c_str());
Json::Value::Members tmp = root[i].getMemberNames();
MD5JSON::ergodicObject(root[i], tmp);
}
}
int MD5JSON::get_int(const char *key)
{
if (root[key].isInt())
return root[key].asInt();
return ;
}
string MD5JSON::get_string(const char *key)
{
if (root[key].isString())
return root[key].asString();
string str;
return str;
}
unsigned int MD5JSON::get_uint(const char *key)
{
if (root[key].isUInt())
return root[key].asUInt();
return -;
}
double MD5JSON::get_double(const char *key)
{
if (root[key].isDouble())
return root[key].asDouble();
return -1.0;
}
bool MD5JSON::get_bool(const char *key)
{
if (root[key].isBool())
return root[key].asBool();
return false;
}
const char *MD5JSON::get_const_string(const char *key)
{
if (root[key].isString())
return root[key].asCString();
return NULL;
}
void MD5JSON::clear()
{
FILE *File = NULL;
fopen_s(&File, this->m_jsonfilename.c_str(), "rb");
if (File)
{
fclose(File);
File = NULL;
string head("del ");
head += this->m_jsonfilename;
int c = system(head.c_str());
if (!c)
{
MJ->createJSONFile(this->m_jsonfilename.c_str());
delete[] buf;
buf = NULL;
return;
}
}
MJ->createJSONFile(this->m_jsonfilename.c_str());
delete[] buf;
buf = NULL;
}
///////////////////////////////////////////////////////// XML
XML *XML::getInstance()
{
static XML xml;
return &xml;
}
string XML::setXMLName(string name)
{
this->name.clear();
return this->name = name;
}
bool XML::createXML()
{
//加载成功
if (!Doc->LoadFile(this->name.c_str()))
{
return Doc->SaveFile(this->name.c_str());
}
return false;
}
bool XML::createXML(string name)
{
//加载成功
if (!Doc->LoadFile(name.c_str()))
{
return Doc->SaveFile(name.c_str());
}
return false;
}
bool XML::loadXML(string name)
{
XML::createXML(name);
TiXmlElement\* e = NULL;
for (e = Doc->FirstChildElement("Node"); e != NULL; e = e->NextSiblingElement())
{
if (e)
{
std::cout << "Account : " << e->Attribute("Account") << ", Password : " << e->Attribute("Password") << std::endl;
}
}
return false;
}
bool XML::insert(string A, string P)
{
TiXmlElement* e = new TiXmlElement("Node");
e->SetAttribute("Account",A.c_str());//得到玩家账号
e->SetAttribute("Password", P.c_str());//得到玩家密码
Doc->LinkEndChild(e);//存入文档
//保存到文档
return Doc->SaveFile(this->name.c_str());
}
bool XML::save()
{
return Doc->SaveFile(this->name.c_str());
}
bool XML::saveToNewFile(string name)
{
return Doc->SaveFile(name.c_str());
}
bool XML::addChild(string node, string key, string value)
{
TiXmlElement* e = new TiXmlElement(node.c_str());
e->SetAttribute(key.c_str(), value.c_str());
//e->SetAttribute(key.c_str(), value.c_str());
//e->SetAttribute(key.c_str(), value.c_str());
//e->SetAttribute(key.c_str(), value.c_str());
//e->SetAttribute(key.c_str(), value.c_str());
//e->SetAttribute(key.c_str(), value.c_str());
//e->SetAttribute(key.c_str(), value.c_str());
//e->SetAttribute(key.c_str(), value.c_str());
//e->SetAttribute(key.c_str(), value.c_str());
Doc->LinkEndChild(e);//存入文档
//保存到文档
return Doc->SaveFile(this->name.c_str());
}
bool XML::addChild(string A, string AV, string P, string PV)
{
TiXmlElement* e = new TiXmlElement("Node");
e->SetAttribute(A.c_str(), AV.c_str());
e->SetAttribute(P.c_str(), PV.c_str());
//e->SetAttribute(key.c_str(), value.c_str());
//e->SetAttribute(key.c_str(), value.c_str());
//e->SetAttribute(key.c_str(), value.c_str());
//e->SetAttribute(key.c_str(), value.c_str());
//e->SetAttribute(key.c_str(), value.c_str());
//e->SetAttribute(key.c_str(), value.c_str());
//e->SetAttribute(key.c_str(), value.c_str());
//e->SetAttribute(key.c_str(), value.c_str());
Doc->LinkEndChild(e);//存入文档
//保存到文档
return Doc->SaveFile(this->name.c_str());
}
XML::XML()
{
name = "XML_FILE.xml";
Doc = new TiXmlDocument();
}
XML::~XML()
{
if (Doc)
{
delete Doc;
Doc = NULL;
}
if (!name.empty())
{
name.clear();
}
}
手机扫一扫
移动阅读更方便
你可能感兴趣的文章