예제 #1
0
void MessageQueue::finish() {
	if (!_parId)
		return;

	MessageQueue *mq = g_fullpipe->_globalMessageQueueList->getMessageQueueById(_parId);

	_parId = 0;

	if (!mq)
		return;

	if (!_flag1) {
		mq->update();
		return;
	}

	mq->_counter--;

	if (!mq->_counter && !mq->_exCommands.size())
		mq->update();
}
예제 #2
0
bool ExCommand::handleMessage() {
	int cnt = 0;
	for (MessageHandler *m = g_fullpipe->_messageHandlers; m; m = m->nextItem)
		cnt += m->callback(this);

	if (_messageKind == 17 || (_excFlags & 1)) {
		if (_parId) {
			MessageQueue *mq = g_fullpipe->_globalMessageQueueList->getMessageQueueById(_parId);
			if (mq)
				mq->update();
		}
	}

	if (_excFlags & 2)
		delete this;

	return (cnt > 0);
}
예제 #3
0
void updateGlobalMessageQueue(int id, int objid) {
	MessageQueue *m = g_fullpipe->_globalMessageQueueList->getMessageQueueById(id);  
	if (m) {
		m->update();
	}
}