void InputServer::sendToClients(char* eventPacket, int priority) { std::map<char*,NetClient*>::iterator itr = netClients.begin(); while( itr != netClients.end() ) { NetClient* client = itr->second; if( client->isLegacy() ) { //client->sendEvent(legacyPacket, 512); } else { if (priority == 0) // UDP { client->sendEvent(eventPacket, DEFAULT_BUFLEN); } else if (priority == 1) // TCP { client->sendMsg(eventPacket, DEFAULT_BUFLEN); } } itr++; } }
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Checks the type of event. If a valid event, creates an event packet and returns true. Else return false. virtual void handleEvent(const Event& evt) { // If the event has been processed locally (i.e. by a filter event service) if(evt.isProcessed()) return; #ifdef OMICRON_USE_VRPN vrpnDevice->update(evt); #endif int offset = 0; OI_WRITEBUF(unsigned int, eventPacket, offset, evt.getTimestamp()); OI_WRITEBUF(unsigned int, eventPacket, offset, evt.getSourceId()); OI_WRITEBUF(int, eventPacket, offset, evt.getServiceId()); OI_WRITEBUF(unsigned int, eventPacket, offset, evt.getServiceType()); OI_WRITEBUF(unsigned int, eventPacket, offset, evt.getType()); OI_WRITEBUF(unsigned int, eventPacket, offset, evt.getFlags()); OI_WRITEBUF(float, eventPacket, offset, evt.getPosition().x()); OI_WRITEBUF(float, eventPacket, offset, evt.getPosition().y()); OI_WRITEBUF(float, eventPacket, offset, evt.getPosition().z()); OI_WRITEBUF(float, eventPacket, offset, evt.getOrientation().w()); OI_WRITEBUF(float, eventPacket, offset, evt.getOrientation().x()); OI_WRITEBUF(float, eventPacket, offset, evt.getOrientation().y()); OI_WRITEBUF(float, eventPacket, offset, evt.getOrientation().z()); OI_WRITEBUF(unsigned int, eventPacket, offset, evt.getExtraDataType()); OI_WRITEBUF(unsigned int, eventPacket, offset, evt.getExtraDataItems()); OI_WRITEBUF(unsigned int, eventPacket, offset, evt.getExtraDataMask()); if(evt.getExtraDataType() != Event::ExtraDataNull) { memcpy(&eventPacket[offset], evt.getExtraDataBuffer(), evt.getExtraDataSize()); } offset += evt.getExtraDataSize(); handleLegacyEvent(evt); std::map<char*,NetClient*> activeClients; std::map<char*,NetClient*>::iterator itr = netClients.begin(); while( itr != netClients.end() ) { NetClient* client = itr->second; if( client->isLegacy() ) { //client->sendEvent(legacyPacket, 512); } else { client->sendMsg("",1); client->sendEvent(eventPacket, offset); } // If client is still connected add to active list if( client->isConnected() ) { activeClients[itr->first] = client; } else // Client disconnected, remove from list { ofmsg("OInputServer: Client '%1%' Disconnected.", %itr->first); delete client; } itr++; } netClients = activeClients; }