示例#1
0
void EntityList::Multicast(const character_set &cset, const char *notifyType, const char *idType, PyTuple **in_payload, bool seq) const {
	std::vector<Client *> result;
	GetClients(cset, result);

	int num_remaining = result.size();
	
	std::vector<Client *>::iterator cur, end;
	cur = result.begin();
	end = result.end();
	PyTuple *payload;
	for(; cur != end; cur++, num_remaining--) {
		//keep a counter to eliminate an extra copy of in_payload
		if(num_remaining < 2) {
			payload = *in_payload;
			*in_payload = NULL;
		} else {
			if(*in_payload == NULL)
				payload = NULL;
			else
				payload = (PyTuple *) (*in_payload)->Clone();
		}
		
		(*cur)->SendNotification(notifyType, idType, &payload, seq);
	}
}
示例#2
0
void *DataSender(void *arg) {
  std::vector<Client *> client_out;
  
  while (true) {
    UpdateBoard();
    client_out.clear();
    GetClients(&client_out);
    SendData(&client_out);
    usleep(100000);
  }
}
示例#3
0
void EntityList::Multicast(const character_set &cset, const PyAddress &dest, EVENotificationStream &noti) const {
	//this could likely be done better

	std::vector<Client *> result;
	GetClients(cset, result);

	std::vector<Client *>::iterator cur, end;
	cur = result.begin();
	end = result.end();
	for(; cur != end; cur++) {
		(*cur)->SendNotification(dest, noti);
	}
}