Ejemplo n.º 1
0
		bool TcpSession::writeMessage( const Message& msg )
		{
			if (!isOk())
			{
				return false;
			}

			boost::mutex::scoped_lock lock(_writeMutex);

			if (!checkWriteBuffer(msg))
			{
				try
				{
					postWriteNull();
				}
				catch (std::exception& e)
				{
					LOGE("Try to write error ==> [ %s ]", e.what());
				}
				return false;
			}
			if ( _writeBuffer )
			{
				writeNolock((const char*)&msg, MessageHeaderLength);			
				writeNolock(msg._msgData, msg.messageDataLen());

				return true;
			}

			LOGE("Write buffer is null");

			return false;
		}
			/**
			 * seek to absolute position
			 **/
			::std::streampos seekpos(::std::streampos sp, ::std::ios_base::openmode /* which */)
			{			
				// flush write buffer before seeking anywhere
				checkWriteBuffer();
				// seek
				off_t const off = doSeek(sp,SEEK_SET);
				
				if ( off == static_cast<off_t>(-1) )
					return -1;
				
				// empty get buffer
				setg(buffer.end(),buffer.end(),buffer.end());
				// empty put buffer
				setp(buffer.begin(),buffer.end()-1);
				// set positions
				readpos = off;
				writepos = off;
				
				return off;
			}