示例#1
0
void RobotManager::BreakChannel(xhn::static_string sender,
                                xhn::static_string receiver)
{
	xhn::RWLock2::Instance inst = m_readwriteLock.GetWriteLock();
	RobotMap::iterator r = m_robotMap.find(receiver);
	if (r != m_robotMap.end()) {
		Robot* rRob = r->second;
		rRob->m_commandReceivingChannels.erase(sender);
	}
	RobotMap::iterator s = m_robotMap.find(sender);
	if (s != m_robotMap.end()) {
		Robot* sRob = r->second;
		Robot::ChannelMap::iterator iter =
        sRob->m_commandTransmissionChannels.find(receiver);
        
		if (iter != sRob->m_commandTransmissionChannels.end()) {
			RobotCommand* cmd[2];
			euint size = 0;
			RWBuffer channel = iter->second;
			while (RWBuffer_Read(channel, (euint*)cmd, &size)) {
				if (size >= sizeof(RobotCommand*))
					delete cmd[0];
			}
			RWBuffer_delete(iter->second);
		}
	}
}
示例#2
0
文件: robot.cpp 项目: vengine/XGC
SafedBuffer::~SafedBuffer()
{
	Mfree(m_transferBuffer);
	RWBuffer_delete(m_buffer);
}