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); } }
void *DataSender(void *arg) { std::vector<Client *> client_out; while (true) { UpdateBoard(); client_out.clear(); GetClients(&client_out); SendData(&client_out); usleep(100000); } }
void EntityList::Multicast(const character_set &cset, const PyAddress &dest, EVENotificationStream ¬i) 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); } }