Example #1
0
/**
 * \brief 发送指令
 * \param pstrCmd 待发送的内容
 * \param nCmdLen 待发送内容的大小
 * \param buffer 是否需要缓冲
 * \return 发送是否成功
 */
bool zSocket::sendCmd(const void *pstrCmd, const int nCmdLen, const bool buffer)
{
	//Zebra::logger->trace("zSocket::sendCmd");
	if (NULL == pstrCmd || nCmdLen <= 0)
		return false;
	bool retval = true;
	if (buffer)
	{
		t_StackCmdQueue _raw_queue;
		packetAppendNoEnc(pstrCmd, nCmdLen, _raw_queue);
		mutex.lock();
		_snd_queue.put(_raw_queue.rd_buf(), _raw_queue.rd_size());
		_current_cmd = _raw_queue.rd_size();
		mutex.unlock();
	}
	else
	{
		t_StackCmdQueue _raw_queue;
		packetAppend(pstrCmd, nCmdLen, _raw_queue);
		mutex.lock();
		retval = sendRawDataIM(_raw_queue.rd_buf(), _raw_queue.rd_size());
		mutex.unlock();
	}
	return retval;
}
Example #2
0
void Socket::forceSync()
{
	CheckConditonVoid(m_sendQueue.rdReady());
	m_mutex.lock();
	sendRawDataIM(m_sendQueue.rdBuffer(),m_sendQueue.rdSize());
	m_currentCmd = m_sendQueue.rdSize();
	m_sendQueue.reset();
	m_mutex.unlock();
	return;

#if 0
	DWORD size = 0,offset = 0;
	m_mutex.lock();
	if(m_bufferQueue.rdReady())
	{
		BUFFER_CMD(Cmd::DataSendCmd,send,s_maxDataSize + 4);
		bcopy(m_bufferQueue.rdBuffer(),send->data,m_bufferQueue.rdSize());
		send->dwSize = m_bufferQueue.rdSize();
		m_bufferQueue.reset();
		m_mutex.unlock();
		StackCmdQueue rawQueue;
		if(*(DWORD*)send->data + sizeof(s_packHeadLen) < send->datasize())
		{
			packetAppendNoEnc(send,send->allsize(),rawQueue);
			m_mutex.lock();
			m_sendQueue.put(rawQueue.rdBuffer(),rawQueue.rdSize());
			m_currentCmd = rawQueue.rdSize();
		}
		else
		{
			m_mutex.lock();
			m_sendQueue.put((const BYTE*)send->data,send->datasize());
			m_currentCmd = send->datasize();
			offset = m_encQueue.rdSize();
			m_encQueue.put(m_sendQueue.rdBuffer(),size);
			m_sendQueue.rdFlip(size);
			m_currentCmd = 0;
		}
	}
	m_mutex.unlock();
	if(m_encQueue.rdReady())
	{
		sendRawDataIM(m_encQueue.rdBuffer(),m_encQueue.rdSize());
		m_encQueue.reset();
	}
#endif
}
Example #3
0
bool Socket::sendCmd(const void *cmd,const DWORD cmdLen,const bool buffer)
{
	LogCheckCondition(cmd && cmdLen,false,"套接字发送失败参数不合法");
	bool retval = true;
	StackCmdQueue rawQueue;
	if(buffer)
	{
		packetAppendNoEnc(cmd,cmdLen,rawQueue);
		m_mutex.lock();
		m_sendQueue.put(rawQueue.rdBuffer(),rawQueue.rdSize());
		m_currentCmd = rawQueue.rdSize();
		m_mutex.unlock();
	}
	else
	{
		packetAppend(cmd,cmdLen,rawQueue);
		m_mutex.lock();
		retval = sendRawDataIM(rawQueue.rdBuffer(),rawQueue.rdSize());
		m_currentCmd = rawQueue.rdSize();
		m_mutex.unlock();
	}
	return retval;
}
Example #4
0
bool Socket::sync()
{
	CheckConditonReturn(m_sendQueue.rdReady(),true);
	m_mutex.lock();
	bool ret = sendRawDataIM(m_sendQueue.rdBuffer(),m_sendQueue.rdSize());
	m_currentCmd = m_sendQueue.rdSize();
	m_sendQueue.reset();
	m_mutex.unlock();
	return ret;

#if 0
	DWORD size = 0,offset = 0;
	m_mutex.lock();
	if(m_bufferQueue.rdReady())
	{
		BUFFER_CMD(Cmd::DataSendCmd,send,s_maxDataSize + 4);
		bcopy(m_bufferQueue.rdBuffer(),send->data,m_bufferQueue.rdSize());
		send->dwSize = m_bufferQueue.rdSize();
		m_bufferQueue.reset();
		StackCmdQueue rawQueue;
		m_mutex.unlock();
		if(*(DWORD*)send->data + sizeof(s_packHeadLen) < send->datasize())
		{
			packetAppendNoEnc(send,send->allsize(),rawQueue);
			m_mutex.lock();
			m_sendQueue.put(rawQueue.rdBuffer(),rawQueue.rdSize());
			m_currentCmd = rawQueue.rdSize();
		}
		else
		{
			m_mutex.lock();
			m_sendQueue.put((const BYTE*)send->data,send->datasize());
			m_currentCmd = send->datasize();
		}
		if(m_sendQueue.rdReady())
		{
			size = m_sendQueue.rdSize();
			m_currentCmd = size;
			offset = m_encQueue.rdSize();
			//暂时加密buffer还没用到
			m_encQueue.put(m_sendQueue.rdBuffer(),size);
			m_sendQueue.rdFlip(size);
			m_currentCmd = 0;
		}
	}
	m_mutex.unlock();
	if(m_encQueue.rdReady())
	{
		SWORD retcode = sendRawDataNoPoll(m_encQueue.rdBuffer(),m_encQueue.rdSize());
		if(retcode > 0)
		{
			m_encQueue.rdFlip(retcode);
		}
		else if(retcode == -1)
		{
			return false;
		}
	}
	return true;
#endif
}