void CLIENT::Run() { SendMessage("login " + GetPassword()); if (NeedDebugLog()) { mDebugLog.open("debug.log", std::ofstream::out | std::ofstream::app); } std::string strLastLineRemaining; std::vector<std::string> LastServerResponse; for(;;) { const size_t ReceiveBufferSize = 1<<16; char ReceiveBuffer[ ReceiveBufferSize+1 ] = {0}; int ReceivedBytesCount = recv( mConnectionSocket, ReceiveBuffer, ReceiveBufferSize, 0 ); if( ReceivedBytesCount == 0 || ReceivedBytesCount == -1) { // connection is closed or failed ConnectionClosed(); return; } ReceiveBuffer[ReceivedBytesCount]=0; char *line_start = ReceiveBuffer; for(;;) { char *s = strchr(line_start, '\n'); if (!s) { strLastLineRemaining = line_start; break; } else { std::string alma=strLastLineRemaining; *s=0; alma+=line_start; line_start = s+1; strLastLineRemaining = ""; LastServerResponse.push_back(alma); if (alma==".") { if (NeedDebugLog() && mDebugLog.is_open()) { for(unsigned int i=0;i<LastServerResponse.size();i++) mDebugLog<<LastServerResponse[i]<<std::endl; } std::string strResponse = HandleServerResponse(LastServerResponse); if (!strResponse.empty()) { SendMessage(strResponse); } LastServerResponse.clear(); } } } } }
void CLIENT::SendMessage( std::string aMessage ) { if (aMessage.length()==0) return; if (aMessage[aMessage.length()-1]!='\n') aMessage+="\n"; if (NeedDebugLog() && mDebugLog.is_open()) { mDebugLog<<"Sent: "<<aMessage; } int SentBytes = send( mConnectionSocket, aMessage.c_str(), int(aMessage.size()), 0 ); if (SentBytes!=aMessage.size()) { ConnectionClosed(); } }