コード例 #1
0
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;
}
コード例 #2
0
ファイル: clientHandler.cpp プロジェクト: RuneHeick/APK15
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");
	}
}
コード例 #3
0
ファイル: Network.cpp プロジェクト: snikk/Junk
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);
}
コード例 #4
0
ファイル: OsEventTest.cpp プロジェクト: Jaroslav23/sipxtapi
    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);
    }