⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 spmsgdecoder.cpp

📁 spserver 是一个实现了半同步/半异步(Half-Sync/Half-Async)和领导者/追随者(Leader/Follower) 模式的服务器框架
💻 CPP
字号:
/* * Copyright 2007 Stephen Liu * For license terms, see the file COPYING along with this library. */#include <string.h>#include "spmsgdecoder.hpp"#include "spbuffer.hpp"//-------------------------------------------------------------------SP_MsgDecoder :: ~SP_MsgDecoder(){}//-------------------------------------------------------------------SP_DefaultMsgDecoder :: SP_DefaultMsgDecoder(){	mBuffer = new SP_Buffer();}SP_DefaultMsgDecoder :: ~SP_DefaultMsgDecoder(){	if( NULL != mBuffer ) delete mBuffer;	mBuffer = NULL;}int SP_DefaultMsgDecoder :: decode( SP_Buffer * inBuffer ){	mBuffer->reset();	mBuffer->append( inBuffer );	inBuffer->reset();	return eOK;}SP_Buffer * SP_DefaultMsgDecoder :: getMsg(){	return mBuffer;}//-------------------------------------------------------------------SP_LineMsgDecoder :: SP_LineMsgDecoder(){	mLine = NULL;}SP_LineMsgDecoder :: ~SP_LineMsgDecoder(){	if( NULL != mLine ) {		free( mLine );		mLine = NULL;	}}int SP_LineMsgDecoder :: decode( SP_Buffer * inBuffer ){	if( NULL != mLine ) free( mLine );	mLine = inBuffer->getLine();	return NULL == mLine ? eMoreData : eOK;}const char * SP_LineMsgDecoder :: getMsg(){	return mLine;}//-------------------------------------------------------------------SP_DotTermMsgDecoder :: SP_DotTermMsgDecoder(){	mBuffer = NULL;}SP_DotTermMsgDecoder :: ~SP_DotTermMsgDecoder(){	if( NULL != mBuffer ) {		free( mBuffer );	}	mBuffer = NULL;}int SP_DotTermMsgDecoder :: decode( SP_Buffer * inBuffer ){	if( NULL != mBuffer ) free( mBuffer );	const char * pos = (char*)inBuffer->find( "\r\n.\r\n", 5 );		if( NULL == pos ) {		pos = (char*)inBuffer->find( "\n.\n", 3 );	}	if( NULL != pos ) {		int len = pos - (char*)inBuffer->getBuffer();		mBuffer = (char*)malloc( len + 1 );		memcpy( mBuffer, inBuffer->getBuffer(), len );		mBuffer[ len ] = '\0';		inBuffer->erase( len );		/* remove with the "\n.." */		char * src, * des;		for( src = des = mBuffer + 1; * src != '\0'; ) {			if( '.' == *src && '\n' == * ( src - 1 ) ) src++ ;			* des++ = * src++;		}		* des = '\0';		if( 0 == strcmp( (char*)pos, "\n.\n" ) ) {			inBuffer->erase( 3 );		} else  {			inBuffer->erase( 5 );		}		return eOK;	} else {		return eMoreData;	}}const char * SP_DotTermMsgDecoder :: getMsg(){	return mBuffer;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -