Example #1
0
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();
				}
			}
		}
	}
}
Example #2
0
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();
    }
}