当前位置: 首页>>代码示例>>C++>>正文


C++ CBuffer::clear方法代码示例

本文整理汇总了C++中CBuffer::clear方法的典型用法代码示例。如果您正苦于以下问题:C++ CBuffer::clear方法的具体用法?C++ CBuffer::clear怎么用?C++ CBuffer::clear使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在CBuffer的用法示例。


在下文中一共展示了CBuffer::clear方法的8个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: sendmessage

int CSocket::sendmessage(char *ip, int port, CBuffer *source)
{

	if(sockid<0)return -1;
	int size = 0;
	sockaddr_in addr;
	if(udp)
	{
		size = std::min(source->count, 8195);
		addr.sin_family = AF_INET;
		addr.sin_port = htons(port);
		addr.sin_addr.s_addr = inet_addr(ip);
		size = sendto(sockid, source->data, size, 0, (sockaddr *)&addr, sizeof(sockaddr_in));
	}
	else
	{
		CBuffer sendbuff;
		sendbuff.clear();
		if(format == 0)
		{
			sendbuff.writeushort(source->count);
			sendbuff.addBuffer(source);
			size = send(sockid, sendbuff.data, sendbuff.count, 0);
		}else if(format == 1)
		{
			sendbuff.addBuffer(source);
			sendbuff.writechars(formatstr);
			size = send(sockid, sendbuff.data, sendbuff.count, 0);
		}else if(format == 2)
			size = send(sockid, source->data, source->count, 0);
	}
	if(size == SOCKET_ERROR)return SOCKET_ERROR;
	return size;
}
开发者ID:serebii01,项目名称:39DLL-4-Linux,代码行数:34,代码来源:socket.cpp

示例2: sendmessage

int CSocket::sendmessage( const char *ip, int port, CBuffer *source )
{

	if (sockid<0) return -1;
	int size = 0;
	SOCKADDR_IN addr;
	if(udp)
	{
		size = min(source->count, 8195);
		addr.sin_family = AF_INET;
		addr.sin_port = htons(port);
		addr.sin_addr.s_addr = inet_addr(ip);
		size = sendto(sockid, source->data, size, 0, (SOCKADDR *)&addr, sizeof(SOCKADDR_IN));
	}
	else
	{
		CBuffer sendbuff;
		sendbuff.clear();
		if(format == 0)
		{
			sendbuff.writeushort(source->count);
			sendbuff.addBuffer(source);
			size = send(sockid, sendbuff.data, sendbuff.count, 0);
		}
		else if(format == 1)
		{
			sendbuff.addBuffer(source);
			sendbuff.writechars(formatstr);
			size = send(sockid, sendbuff.data, sendbuff.count, 0);
		}
		else if(format == 2)
			size = send(sockid, source->data, source->count, 0);
	}
	return ((size = SOCKET_ERROR) ? -WSAGetLastError() : size);
}
开发者ID:MensInvictaManet,项目名称:Projects,代码行数:35,代码来源:CSocket.cpp

示例3: Uncompress

bool ZLibUtils::Uncompress(CBuffer& pSrc)
{
	QMutexLocker l(&ZLibUtils::m_oMutex);

	for(ulong nSize = qMax(pSrc.size() * 6u, 1024u); ; nSize *= 2)
	{
		ZLibUtils::m_oCompressBuffer.resize(nSize);

		ulong nCompress = ZLibUtils::m_oCompressBuffer.size();

		int nRet = ::uncompress((Bytef*)ZLibUtils::m_oCompressBuffer.data(), &nCompress, (Bytef*)pSrc.data(), pSrc.size());

		if(nRet == Z_OK)
		{
			ZLibUtils::m_oCompressBuffer.resize(nCompress);
			pSrc.clear();
			pSrc.append(ZLibUtils::m_oCompressBuffer);

			break;
		}

		if(nRet != Z_BUF_ERROR)
		{
			return false;
		}
	}

	return true;

}
开发者ID:BackupTheBerlios,项目名称:quazaa-svn,代码行数:30,代码来源:zlibutils.cpp

示例4: Compress

bool ZLibUtils::Compress(CBuffer& pSrc, bool bIfSmaller)
{
	QMutexLocker l(&ZLibUtils::m_oMutex);

	if(bIfSmaller && pSrc.size() < 64)
	{
		return false;
	}

	ulong nCompress = qMax(ZLibUtils::m_oCompressBuffer.size(), pSrc.size() * 2);

	ZLibUtils::m_oCompressBuffer.resize(nCompress);

	int nRet = ::compress((Bytef*)ZLibUtils::m_oCompressBuffer.data(), &nCompress, (const Bytef*)pSrc.data(), pSrc.size());

	if(nRet != Z_OK)
	{
		Q_ASSERT(nRet != Z_BUF_ERROR);
		return false;
	}

	ZLibUtils::m_oCompressBuffer.resize(nCompress);

	if(bIfSmaller && ZLibUtils::m_oCompressBuffer.size() > pSrc.size())
	{
		return false;
	}

	pSrc.clear();
	pSrc.append(ZLibUtils::m_oCompressBuffer);

	return true;
}
开发者ID:BackupTheBerlios,项目名称:quazaa-svn,代码行数:33,代码来源:zlibutils.cpp

示例5: updateModel

void CLoaderTGeometry::updateModel(IModel * model, const std::map<int, TTextureId>& textures) const
{
    if (model == nullptr)
        return;

    CBuffer * buffer = model->getBuffer();

    if (buffer == nullptr)
        return;

    buffer->clear();

    const std::size_t numFaces = m_textures.size();

    std::vector<unsigned int>& indices = buffer->getIndices();
    indices = m_indices;

    std::vector<TVector3F>& vertices = buffer->getVertices();
    vertices = m_vertices;

    std::vector<TVector2F>& text_coords = buffer->getTextCoords();
    text_coords = m_coords;

    TBufferTextureVector& text = buffer->getTextures();
    text.clear();
    text.reserve(numFaces);

    for (std::size_t i = 0; i < numFaces; ++i)
    {
        TBufferTexture t;
        t.nbr = 3;

        std::map<int, TTextureId>::const_iterator it = textures.find(m_textures[i]);

        if (it == textures.end())
        {
            t.texture[0] = CTextureManager::DefaultTexture;
        }
        else
        {
            t.texture[0] = it->second;
        }

        text.push_back(t);
    }

    buffer->update();
}
开发者ID:teddy-michel,项目名称:TEngine,代码行数:48,代码来源:CLoaderTGeometry.cpp

示例6: sendmessage

int CSocket::sendmessage(char *ip, int port, CBuffer *source)
{

	if(sockid<0)return -1;
	int size = 0;
	SOCKADDR_IN addr;
	if(proc == UDP_NORMAL )
	{
		size = min(source->count, 8195);
		addr.sin_family = AF_INET;
		addr.sin_port = htons(port);
		addr.sin_addr.s_addr = inet_addr(ip);
		size = sendto(sockid, source->data, size, 0, (SOCKADDR *)&addr, sizeof(SOCKADDR_IN));
	}
	else if ( proc == UDP_MULTICAST ) 
	{
		//...UDP MULTI-CAST RE-USES SAME ADDRESS
		size = min(source->count, 8195);

		//...For multi-cast : check if we are sending to a different port
		if ( port!= 0 ){
			memcpy (&addr, &udpAddr , sizeof(SOCKADDR_IN) );
			addr.sin_port = htons(port);
		}
		size = sendto(sockid, source->data, size, 0, (SOCKADDR *)&addr , sizeof(SOCKADDR_IN));
	}
	else
	{
		CBuffer sendbuff;
		sendbuff.clear();
		if(format == 0)
		{
			sendbuff.writeushort(source->count);
			sendbuff.addBuffer(source);
			size = send(sockid, sendbuff.data, sendbuff.count, 0);
		}else if(format == 1)
		{
			sendbuff.addBuffer(source);
			sendbuff.writechars(formatstr);
			size = send(sockid, sendbuff.data, sendbuff.count, 0);
		}else if(format == 2)
			size = send(sockid, source->data, source->count, 0);
	}
	if(size == EWOULDBLOCK)return -errno;
	return size;
}
开发者ID:RawLiquid,项目名称:RPi-Service,代码行数:46,代码来源:sock.cpp

示例7: receiveBytes

int CSocket::receiveBytes(CBuffer& pDestination, int pCount, int pMode)
{
	char buff[8192];
	int size = 0;
	fd_set set;
	struct timeval tm;
	pDestination.clear();
	tm.tv_sec = 0;
	tm.tv_usec = 0;
	while(size < pCount)
	{
		if(!blocking)
		{
			FD_ZERO(&set);
			FD_SET((unsigned int)sockId,&set);
			select(sockId+1,&set,NULL,NULL,&tm);
			if (!FD_ISSET(sockId,&set))
				return size;
		}
		int len = pCount - size;
		if(len > 8192)
			len = 8192;
		if(len < 0)
			return size;

		int a = recv(sockId, buff, len, 0);
		if(a == 0)
			return -1;
		if(a < 0)
		{
			if(lastError() == EWOULDBLOCK || lastError() == EMSGSIZE)
				break;
			else return -lastError();
		}
		size+=a;
		pDestination.writeBytes(buff, a);
		if(udp)
			break;
	}
	return size;
}
开发者ID:Guthius,项目名称:gs2emu-googlecode,代码行数:41,代码来源:CSocket.cpp

示例8: apply

/* Never was great formulating =P */
bool CWordFilter::apply(CPlayer *pPlayer, CBuffer &pBuffer, int pCheck)
{
	bool logsave = false, rctell = false;
	CBuffer start;
	CStringList found;
	int pos = 0, wc = 0;

	for (int i = 0; i < WordList.count(); i++)
	{
		WordMatch *word = (WordMatch *)WordList[i];
		if (!word->check[pCheck])
			continue;

		for (int j = 0; j < pBuffer.length(); j++)
		{
			for (int k = 0; k < word->match.length(); k++)
			{
				char c1 = pBuffer[j + k];
				char c2 = word->match[k];
				if (c2 != '?' && (isUpper(c2) && c2 != c1) || (isLower(c2) && toLower(c2) != toLower(c1)))
				{
					if (wc >= word->precision)
					{
						found.add(start);

						for (int l = 0; l < (int)sizeof(word->action); l++)
						{
							if (!word->action[l])
								continue;

							switch (l)
							{
								case FILTERA_LOG:
									if (logsave)
										break;

									logsave = true;
									if (pPlayer != NULL)
										errorOut("wordfilter.txt", CBuffer() << pPlayer->accountName << " has used rude words while chatting: " << start);
								break;

								case FILTERA_REPLACE:
									pos = pBuffer.find(' ', j);
									pos = (pos == -1 ? start.length() : pos-j+1);
									for (int m = 0; m < pos; m++)
										pBuffer.replace(j + m, '*');
								break;

								case FILTERA_TELLRC:
									if (rctell)
										break;

									rctell = true;
									if (pPlayer != NULL)
										sendRCPacket(CPacket() << (char)DRCLOG << pPlayer->accountName << " has used rude words while chatting: " << start);
								break;

								case FILTERA_WARN:
									pBuffer = (word->warnmessage.length() > 0 ? word->warnmessage : warnmessage);
								break;

								case FILTERA_JAIL: // kinda useless...?
								break;

								case FILTERA_BAN:
									if (pPlayer != NULL)
									{
										CBuffer pLog = CBuffer() << "\n" << getTimeStr(0) << "\n" << pPlayer->accountName << " has used rude words while chatting: " << start;
										pPlayer->setBan(pLog, true);
									}
								break;
							}
						}
					}

					start.clear();
					wc = 0;
					break;
				}

				start.writeChar(c1);
				wc++;
			}
		}
	}

	return (found.count() > 0);
}
开发者ID:Guthius,项目名称:gs2emu-googlecode,代码行数:89,代码来源:CWordFilter.cpp


注:本文中的CBuffer::clear方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。