bool nxNetworkEventForwarder::HandleEvent( nxIEventData const & event ) { log(NX_LOG_DEBUG, "forwarding event to network manager..."); stringstream out; // out << static_cast<int>(RemoteEventSocket::NetMsg_Event) << " "; // out << event.getType().getStr() << " "; // out << static_cast<int>(event.VGetEventType()) << " "; out << static_cast<uint32_t>(event.VGetEventType()) << " "; event.VSerialize(out); out << "\n"; shared_ptr<nxBinaryPacket> eventMsg( NX_NEW nxBinaryPacket(out.str().c_str(), out.str().size())); /* cout <<"sending:"; cout << out.rdbuf()->str() <<endl; cout <<"sending size:"; cout << out.pcount() <<endl; */ nxNexteroidsGameApp::GetInstance().VGetNetworkManager()->SendToAllSubscribers(eventMsg); return true; }
void ClientHandler::HandleEvent(EventJoin& event, ClientInfo& client) { Cli::writeDebugMsg("Handling join event"); std::lock_guard<std::mutex> lock(mtx); // find client auto itr = m_ClientToRoomMap.find( (void*)&client ); if(itr == m_ClientToRoomMap.end()) { // Make sure it returned something Cli::writeLogMsg(Cli::LOGTYPE_ERROR, "Unable find client in map"); client.Disconnect(); return; } try { // Set new name *itr->second.name_ptr = event.getUser(); // Change room if different: std::shared_ptr<Room> newRoom_ptr = roomHandler.getRoom(event.getTargetRoom()); if( itr->second.room_ptr != newRoom_ptr ) { // Move to new room: itr->second.room_ptr->removeClient(itr->second.client_ptr); itr->second.room_ptr = newRoom_ptr; itr->second.room_ptr->addClient(itr->second.client_ptr); } EventMsg eventMsg("Server", *itr->second.name_ptr + std::string(" joined ") + itr->second.room_ptr->getName()); itr->second.room_ptr->broadcastMsg(eventMsg); }catch (...) { Cli::writeLogMsg(Cli::LOGTYPE_ERROR, "Exception during Join update"); } }
void NetworkEventForwarder::ForwardEvent(IEventDataPtr pEventData) { std::ostrstream out; out << static_cast<int>(RemoteEventSocket::NetMsg_Event) << " "; out << pEventData->VGetEventType() << " "; pEventData->VSerialize(out); out << "\r\n"; std::shared_ptr<BinaryPacket> eventMsg(GCC_NEW BinaryPacket(out.rdbuf()->str(), out.pcount())); g_pSocketManager->Send(m_sockId, eventMsg); }
void testThreadedEvent() { // Seed the random number generator srand(OsDateTime::getSecsSinceEpoch()); int numTries = 100; int* rightResults = new int[numTries]; int* leftResults = new int[numTries]; // Create the Right thread. This context will be the // Left thread. RightEventThread rightThread(rightResults, numTries); rightThread.start(); int index; for(index = 0; index < numTries; index++) { OsEvent* event = new OsEvent(index); OsRpcMsg eventMsg(OsMsg::USER_START,0,*event); rightThread.postMessage(eventMsg); int waitTimeMsec = (rand() % 3) * 110; OsTime time(0, waitTimeMsec * 1000); event->wait(time); OsStatus eventStat = event->signal(index); if(eventStat == OS_ALREADY_SIGNALED) { // We (Left) lost the other side is done int eventData; event->getEventData(eventData); CPPUNIT_ASSERT(eventData == index); // This/Left side deletes the event delete event; event = NULL; leftResults[index] = TRUE; } else { // The other/Right side lost // Do nothing leftResults[index] = FALSE; //osPrintf("Left: %d\n", eventStat); } } OsTask::delay(1000); int leftDeletes = 0; int rightDeletes = 0; for(index = 0; index < numTries; index++) { if(leftResults[index] == TRUE) { leftDeletes++; } if(rightResults[index] == TRUE) { rightDeletes++; } if(rightResults[index] == leftResults[index]) { //osPrintf("Left deleted: %d Right deleted: %d\n", // leftDeletes, rightDeletes); //osPrintf("[%d]: Both sides %s\n", index, // rightResults[index] ? "Deleted" : "Did not delete"); } CPPUNIT_ASSERT(rightResults[index] != leftResults[index]); } //osPrintf("Left deleted: %d Right deleted: %d\n", // leftDeletes, rightDeletes); CPPUNIT_ASSERT(leftDeletes + rightDeletes == numTries); }