www.pudn.com > fanccMSNr.src.rar > MessageFactory.cpp


#include "MessageFactory.hpp" 
#include "BinaryMessage.hpp" 
#include  
 
namespace poral { 
	namespace { 
		BinaryMessage *extractBinaryMessage(string &buffer) { 
			const char *byteBuffer=buffer.data(); 
			size_t size=(unsigned char)byteBuffer[1] + ((unsigned char)byteBuffer[2])*256; 
			if(buffer.size()> nMIMEMessage; 
				nMIMEMessage+=nHeader; 
 
				if((int)(buffer.size())>=nMIMEMessage) { 
					// ¹öÆÛ·ÎºÎÅÍ ¸Þ½ÃÁö¸¦ »Ì¾Æ³½´Ù. 
					string stringMessage = buffer.substr(0, nMIMEMessage); 
					MIMEMessage *message = new MIMEMessage(stringMessage); 
 
					// »Ì¾Æ³½ ¸Þ½ÃÁö¸¦ ¹öÆÛ¿¡¼­ »èÁ¦ÇÑ´Ù. 
					buffer.replace(0, nMIMEMessage, ""); 
					 
					return message; 
				} 
			} 
			return NULL; 
		} 
 
		Message *extractMessage(string &buffer) { 
			string::size_type posNewLine = buffer.find('\n'); 
			if(posNewLine!=string::npos) { 
				// ¹öÆÛ·ÎºÎÅÍ ¸Þ½ÃÁö¸¦ »Ì¾Æ³½´Ù. 
				string stringMessage = buffer.substr(0, posNewLine+1); 
				Message *message = new Message(stringMessage); 
				// »Ì¾Æ³½ ¸Þ½ÃÁö¸¦ ¹öÆÛ¿¡¼­ »èÁ¦ÇÑ´Ù. 
				buffer.replace(0, posNewLine+1, ""); 
 
				return message; 
			} 
			return NULL; 
		} 
	} 
 
	Message *MessageFactory::createMessage(string &buffer) { 
		if(buffer.size()==0) { 
			return NULL; 
		} 
		const char *byteBuffer=buffer.data(); 
		if(byteBuffer[0]==1) { 
			buffer.erase(buffer.begin(), buffer.end()); 
 
			Message *message= new Message; 
			message->setName("CANCEL"); 
			return message; 
		}  
		else if(buffer.data()[0]==0) { 
			return extractBinaryMessage(buffer); 
		}  
		else if(buffer.compare(0,3, "MSG")==0) { 
			return extractMIMEHeader(buffer); 
		}  
		else { 
			return extractMessage(buffer); 
		} 
	} 
 
}