~TestProxy() { IMessageQueue::size_type count = 0; #ifdef _WIN32 BOOL result = 0; MSG msg; memset(&msg, 0, sizeof(msg)); while ((result = ::GetMessage(&msg, NULL, 0, 0)) != 0) { BOOST_CHECK(-1 != result) ::TranslateMessage(&msg); ::DispatchMessage(&msg); count = mThread->getTotalUnprocessedMessages(); count += mThread->getTotalUnprocessedMessages(); if (0 == count) break; memset(&msg, 0, sizeof(msg)); } #elif __APPLE__ count = mThread->getTotalUnprocessedMessages(); do { //Run loop to handle sources CFRunLoopRunInMode(kCFRunLoopDefaultMode,1,false); count = mThread->getTotalUnprocessedMessages(); } while (count > 0); #else do { count = mThread->getTotalUnprocessedMessages(); count += mThreadNeverCalled->getTotalUnprocessedMessages(); if (0 != count) boost::this_thread::yield(); } while (count > 0); #endif //_WIN32 BOOST_EQUAL(0, mThread->getTotalUnprocessedMessages()); BOOST_EQUAL(0, mThreadNeverCalled->getTotalUnprocessedMessages()); mThread->waitForShutdown(); mThreadNeverCalled->waitForShutdown(); BOOST_EQUAL(getCheck().mCalledFunc3, "func3"); BOOST_EQUAL(getCheck().mCalledFunc2, 1000); BOOST_CHECK(getCheck().mCalledFunc1); BOOST_CHECK(getCheck().mDestroyedTestProxyCallback); }
TestProxy() { mThread = zsLib::MessageQueueThread::singletonUsingCurrentGUIThreadsMessageQueue(); mThreadNeverCalled = zsLib::MessageQueueThread::singletonUsingCurrentGUIThreadsMessageQueue(); TestProxyCallbackPtr testObject = TestProxyCallback::create(mThread); ITestProxyDelegatePtr delegate = zsLib::Proxy<ITestProxyDelegate>::create(testObject); delegate->func1(); for (int i = 0; i < 1000; ++i) { delegate->func2(); } zsLib::String str("func3"); delegate->func3(str); str = "bogus3"; delegate->func4(0xFFFF); BOOST_EQUAL(getCheck().mCalledFunc4, 0xFFFF); BOOST_EQUAL(delegate->func5(0xABC, 0xDEF), "abc def"); }
SocketTest() { zsLib::MessageQueueThreadPtr thread(zsLib::MessageQueueThread::createBasic()); SocketServerPtr server(SocketServer::create(thread)); boost::this_thread::sleep(zsLib::Seconds(1)); zsLib::IPAddress address = zsLib::IPAddress(zsLib::IPAddress::loopbackV4(), 43217); zsLib::SocketPtr socket = zsLib::Socket::createUDP(); socket->bind(address); socket->sendTo(server->getAddress(), (BYTE *)"HELLO1", sizeof("HELLO1") + sizeof(char)); boost::this_thread::sleep(zsLib::Seconds(5)); socket->sendTo(server->getAddress(), (BYTE *)"HELLO2", sizeof("HELLO2") + sizeof(char)); boost::this_thread::sleep(zsLib::Seconds(10)); BOOST_EQUAL(2, server->mReadReadyCalled); BOOST_EQUAL(1, server->mWriteReadyCalled); BOOST_EQUAL(0, server->mExceptionCalled); BOOST_EQUAL(2, server->mReadData.size()); BOOST_EQUAL(2, server->mReadAddresses.size()); BOOST_EQUAL("HELLO1", server->mReadData[0]); BOOST_EQUAL("HELLO2", server->mReadData[1]); BOOST_CHECK(address == server->mReadAddresses[0]); BOOST_CHECK(address == server->mReadAddresses[1]); server.reset(); ULONG count = 0; do { count = thread->getTotalUnprocessedMessages(); if (0 != count) boost::this_thread::yield(); } while (count > 0); thread->waitForShutdown(); BOOST_EQUAL(zsLib::proxyGetTotalConstructed(), 0); }