mFast analiza el contenido del mercado FAST

Tabla de contenido

1. Preparación

2. Función mFast

3. Decodificación

4. Resultados


mRÁPIDO

Análisis de protocolo FAST (5) Uso de la biblioteca de análisis de código abierto mFAST - nil - xuanyu.li

FAST codifica contenido de texto plano en contenido binario mediante ciertas reglas, con el propósito de comprimir datos y reducir la presión de transmisión. Al decodificar, puede utilizar algunas bibliotecas de código abierto para decodificar, como mFast (C ++), openFast está escrito en java.

1. Preparación

GitHub - computación de objetos/mFAST en v1.2.1

Primero descargue el último código fuente de mFast y luego use cmake para configurar. mFast depende de boost, por lo que debe especificar la ruta de boost al configurar, luego configurar, generar y luego abrir el proyecto con VS.

 Al compilar después de abrir, se le indica que tinyxml2 no tiene código fuente. Debe descargar manualmente el código fuente de tinyxml2, colocarlo en la carpeta tinyxml2 en mFast y luego usar cmake para generarlo nuevamente.

Luego compile, el proyecto mfast_test le indicará que no se puede encontrar Catch.hpp. Este archivo también es un archivo de prueba de código abierto. Solo necesita un archivo de encabezado. Puede descargarlo desde

https://github.com/philsquared/Catch/releases/download/v1.7.2/catch.hpp

Descárgalo aquí y agrégalo al proyecto mfast_test.

Una vez completada la compilación, puede ejecutar el proyecto hello_world, que muestra un ejemplo de decodificación rápida.

Los archivos de encabezado de la biblioteca mFast y los archivos de encabezado de impulso se especifican en el directorio de inclusión del proyecto.

2. Función mFast

Proyecto hello_world: la plantilla está codificada en el código y se proporciona una parte del contenido codificado rápidamente en el código, que luego se analiza y se convierte al formato json para la salida.

proyecto fast_type_gen:

Este proyecto se utiliza para convertir plantillas xml en archivos .h, .cpp y .inl. El uso es fast_type_gen.exe template.xml

3. Decodificación

Yo mismo escribí una clase de decodificación y el archivo de encabezado de plantilla generado por include se puede decodificar.

mfastDecoder.h

#pragma once
#include"template_2_26.h"//模板头文件
#include<iostream>
#include<mFast.h>
#include <mfast/coder/fast_decoder.h>
#include <mfast/json/json.h>

class mfastDecoder
{
public:
	//解码器
	std::shared_ptr<mfast::fast_decoder> m_fastDecoder;
public:
	mfastDecoder();
	//初始化
	void init();
	//解码
	void decoder(std::string&msg);
};

 mfastDecoder.cpp

#include "mfastDecoder.h"

mfastDecoder::mfastDecoder() {
	init();
}

//初始化
void mfastDecoder::init() {
	const mfast::templates_description* descriptions[] = { template_2_26::description() };
	m_fastDecoder = std::make_shared<mfast::fast_decoder>();
	m_fastDecoder->include(descriptions);
}

//解码
void mfastDecoder::decoder(std::string&msg) {
	const char* start = msg.c_str();
	const char* end = start + msg.length();
	bool first_quote = true;
	std::ostringstream json_message;
	while (start != end)
	{
		if (!first_quote)
		{
			mfast::message_cref fastMsg = m_fastDecoder->decode(start, end, false);
			bool result = mfast::json::encode(json_message, fastMsg, 0);
		}
		else
		{
			// first quote need to reset FAST decoder
			mfast::message_cref fastMsg = m_fastDecoder->decode(start, end, true);
			bool result = mfast::json::encode(json_message, fastMsg, 0);
			first_quote = false;
		}
		json_message << std::endl;
	}
	std::cout << "decoder result: \n" << json_message.str() << std::endl;
}

 uso:

std::string _fast;//待解码的fast内容

//解码
mfastDecoder m;
m.decoder(_fast);

4. Resultados

Cabe señalar que si el contenido rápido a decodificar contiene un encabezado de 40 bytes que comienza con 0x0004c453, es necesario eliminarlo y analizarlo comenzando desde el área de datos.

Supongo que te gusta

Origin blog.csdn.net/ljjjjjjjjjjj/article/details/132666571
Recomendado
Clasificación