www.pudn.com > fanccMSNr.src.rar > MessageFactory.cpp
#include "MessageFactory.hpp" #include "BinaryMessage.hpp" #includenamespace 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); } } }