void sendMsgRepeatFunc() { std::vector<Network::ConnectionID> kConnectionIDVec; for (unsigned int ui = 0; ui < 100; ++ui) { if (!g_bKeepRunningFlag) { break; } Network::ConnectionID uID = kTcpNetwork.connect("127.0.0.1", 7890); while (uID == Network::INVALID_CONNECTION_ID) { uID = kTcpNetwork.connect("127.0.0.1", 7890); } kConnectionIDVec.push_back(uID); } char cChar = 'a'; boost::uniform_int<> kDistribution(1, 512) ; boost::mt19937 kEngine ; boost::variate_generator<boost::mt19937, boost::uniform_int<> > kRandom(kEngine, kDistribution); //int i = 10; while (g_bKeepRunningFlag) { boost::this_thread::sleep(boost::posix_time::milliseconds(200)); //char acBuff[] = "sendMsgRepeatFunc hello world.\n"; //kTcpNetwork.send(uID, (unsigned char*)acBuff, strlen(acBuff)); unsigned int uiSize = kRandom(); char* pBuff = new char[uiSize]; for (unsigned int ui = 0; ui < uiSize; ++ui) { pBuff[ui] = cChar; if (cChar == 'z') { cChar = 'a'; } else { ++cChar; } } for (unsigned int ui = 0; ui < kConnectionIDVec.size(); ++ui) { kTcpNetwork.send(kConnectionIDVec[ui], (unsigned char*)pBuff, uiSize); } delete[] pBuff; kTcpNetwork.running(); } }
/** * 임의의 X, Y 좌표를 반환 */ void kGetRandomXY( int* piX, int* piY ) { int iRandom; // X좌표를 계산 iRandom = kRandom(); *piX = ABS( iRandom ) % 1000; // Y좌표를 계산 iRandom = kRandom(); *piY = ABS( iRandom ) % 700; }
void sendPacketOnceFunc() { Utility::FrameRate kFrameRate; char cChar = 'a'; boost::uniform_int<> kDistribution(1, 8192); boost::mt19937 kEngine; boost::variate_generator<boost::mt19937, boost::uniform_int<> > kRandom(kEngine, kDistribution); while (g_bKeepRunningFlag) { //boost::this_thread::sleep(boost::posix_time::milliseconds(1000)); Network::ConnectionID uID = kTcpNetwork.connect("192.168.1.201", 7890); while (uID == Network::INVALID_CONNECTION_ID) { uID = kTcpNetwork.connect("192.168.1.201", 7890); } if (uID != Network::INVALID_CONNECTION_ID) { std::cout << "sendPacketOnceFunc connected, ID = " << uID << std::endl; TestCommonDefine::Packet kPacket; unsigned int uiSize = kRandom(); for (unsigned int ui = 0; ui < uiSize; ++ui) { kPacket.acBuff[ui] = cChar; if (cChar == 'z') { cChar = 'a'; } else { ++cChar; } } kPacket.uiPacketSize = uiSize + 4; if (kTcpNetwork.send(uID, (unsigned char*)(&kPacket), kPacket.uiPacketSize)) { std::cout << uID << " send successful, packet size " << kPacket.uiPacketSize << std::endl; kFrameRate.stat(); kFrameRate.showOnWindowTitle(1e3); } else { std::cout << uID << " send failed, packet size " << kPacket.uiPacketSize << std::endl; } } kTcpNetwork.asyncCloseConnection(uID); kTcpNetwork.running(); } }
/** * 임의의 색을 반환 */ COLOR kGetRandomColor( void ) { int iR, iG, iB; int iRandom; iRandom = kRandom(); iR = ABS( iRandom ) % 256; iRandom = kRandom(); iG = ABS( iRandom ) % 256; iRandom = kRandom(); iB = ABS( iRandom ) % 256; return RGB( iR, iG, iB ); }
void sendPacketRepeatFunc() { Utility::FrameRate kFrameRate; std::vector<Network::ConnectionID> kConnectionIDVec; for (unsigned int ui = 0; ui < 100; ++ui) { if (!g_bKeepRunningFlag) { break; } //boost::this_thread::sleep(boost::posix_time::milliseconds(50)); Network::ConnectionID uID = kTcpNetwork.connect("192.168.1.201", 7890); while (uID == Network::INVALID_CONNECTION_ID) { uID = kTcpNetwork.connect("192.168.1.201", 7890); if (!g_bKeepRunningFlag) { return; } } kConnectionIDVec.push_back(uID); } char cChar = 'a'; boost::uniform_int<> kDistribution(1, 8192); boost::mt19937 kEngine ; boost::variate_generator<boost::mt19937, boost::uniform_int<> > kRandom(kEngine, kDistribution); TestCommonDefine::Packet kPacket; while (g_bKeepRunningFlag) { boost::this_thread::sleep(boost::posix_time::milliseconds(10)); unsigned int uiSize = /*120 * 1024 - 4;*/kRandom(); for (unsigned int ui = 0; ui < uiSize; ++ui) { kPacket.acBuff[ui] = cChar; if (cChar == 'z') { cChar = 'a'; } else { ++cChar; } } kPacket.uiPacketSize = uiSize + 4; for (unsigned int ui = 0; ui < kConnectionIDVec.size(); ++ui) { boost::posix_time::ptime uiBeginTick = boost::posix_time::microsec_clock::local_time(); unsigned int uiTotalPacketCnt = 0; unsigned int uiDataSizeCnt = 0; unsigned int uiFrameRate = 0; if (kTcpNetwork.send(kConnectionIDVec[ui], (unsigned char*)(&kPacket), kPacket.uiPacketSize)) { kFrameRate.stat(); kFrameRate.showOnWindowTitle(1e3); //boost::this_thread::sleep(boost::posix_time::milliseconds(1)); uiDataSizeCnt += kPacket.uiPacketSize; ++uiFrameRate; boost::posix_time::time_duration uiRunTick = boost::posix_time::microsec_clock::local_time() - uiBeginTick; if (uiRunTick.seconds() > 1) { std::cout <<uiFrameRate << " frames " << kConnectionIDVec[ui] << " sent data size " << uiDataSizeCnt << std::endl; uiDataSizeCnt = 0; uiFrameRate = 0; uiBeginTick = boost::posix_time::microsec_clock::local_time(); } ++uiTotalPacketCnt; } else { std::cout << kConnectionIDVec[ui] << " send failed " << uiTotalPacketCnt << std::endl; } } kTcpNetwork.running(); } }
/** * 그래픽 모드를 테스트하는 함수 */ void kStartGraphicModeTest() { VBEMODEINFOBLOCK* pstVBEMode; int iX1, iY1, iX2, iY2; COLOR stColor1, stColor2; int i; char* vpcString[] = { "Pixel", "Line", "Rectangle", "Circle", "MINT64 OS~!!!" }; //========================================================================== // 점, 선, 사각형, 원, 그리고 문자를 간단히 출력 //========================================================================== // (0, 0)에 Pixel이란 문자열을 검은색 바탕에 흰색으로 출력 kDrawText( 0, 0, RGB( 255, 255, 255), RGB( 0, 0, 0 ), vpcString[ 0 ], kStrLen( vpcString[ 0 ] ) ); // 픽셀을 (1, 20), (2, 20)에 흰색으로 출력 kDrawPixel( 1, 20, RGB( 255, 255, 255 ) ); kDrawPixel( 2, 20, RGB( 255, 255, 255 ) ); // (0, 25)에 Line이란 문자열을 검은색 바탕에 빨간색으로 출력 kDrawText( 0, 25, RGB( 255, 0, 0), RGB( 0, 0, 0 ), vpcString[ 1 ], kStrLen( vpcString[ 1 ] ) ); // (20, 50)을 중심으로 (1000, 50) (1000, 100), (1000, 150), (1000, 200), // (1000, 250)까지 빨간색으로 출력 kDrawLine( 20, 50, 1000, 50, RGB( 255, 0, 0 ) ); kDrawLine( 20, 50, 1000, 100, RGB( 255, 0, 0 ) ); kDrawLine( 20, 50, 1000, 150, RGB( 255, 0, 0 ) ); kDrawLine( 20, 50, 1000, 200, RGB( 255, 0, 0 ) ); kDrawLine( 20, 50, 1000, 250, RGB( 255, 0, 0 ) ); // (0, 180)에 Rectangle이란 문자열을 검은색 바탕에 녹색으로 출력 kDrawText( 0, 180, RGB( 0, 255, 0), RGB( 0, 0, 0 ), vpcString[ 2 ], kStrLen( vpcString[ 2 ] ) ); // (20, 200)에서 시작하여 길이가 각각 50, 100, 150, 200인 사각형을 녹색으로 출력 kDrawRect( 20, 200, 70, 250, RGB( 0, 255, 0 ), FALSE ); kDrawRect( 120, 200, 220, 300, RGB( 0, 255, 0 ), TRUE ); kDrawRect( 270, 200, 420, 350, RGB( 0, 255, 0 ), FALSE ); kDrawRect( 470, 200, 670, 400, RGB( 0, 255, 0 ), TRUE ); // (0, 550)에 Circle이란 문자열을 검은색 바탕에 파란색으로 출력 kDrawText( 0, 550, RGB( 0, 0, 255), RGB( 0, 0, 0 ), vpcString[ 3 ], kStrLen( vpcString[ 3 ] ) ); // (45, 600)에서 시작하여 반지름이 25, 50, 75, 100인 원을 파란색으로 출력 kDrawCircle( 45, 600, 25, RGB( 0, 0, 255 ), FALSE ) ; kDrawCircle( 170, 600, 50, RGB( 0, 0, 255 ), TRUE ) ; kDrawCircle( 345, 600, 75, RGB( 0, 0, 255 ), FALSE ) ; kDrawCircle( 570, 600, 100, RGB( 0, 0, 255 ), TRUE ) ; // 키 입력 대기 kGetCh(); //========================================================================== // 점, 선, 사각형, 원, 그리고 문자를 무작위로 출력 //========================================================================== // q 키가 입력될 때까지 아래를 반복 do { // 점 그리기 for( i = 0 ; i < 100 ; i++ ) { // 임의의 X좌표와 색을 반환 kGetRandomXY( &iX1, &iY1 ); stColor1 = kGetRandomColor(); // 점 그리기 kDrawPixel( iX1, iY1, stColor1 ); } // 선 그리기 for( i = 0 ; i < 100 ; i++ ) { // 임의의 X좌표와 색을 반환 kGetRandomXY( &iX1, &iY1 ); kGetRandomXY( &iX2, &iY2 ); stColor1 = kGetRandomColor(); // 선 그리기 kDrawLine( iX1, iY1, iX2, iY2, stColor1 ); } // 사각형 그리기 for( i = 0 ; i < 20 ; i++ ) { // 임의의 X좌표와 색을 반환 kGetRandomXY( &iX1, &iY1 ); kGetRandomXY( &iX2, &iY2 ); stColor1 = kGetRandomColor(); // 사각형 그리기 kDrawRect( iX1, iY1, iX2, iY2, stColor1, kRandom() % 2 ); } // 원 그리기 for( i = 0 ; i < 100 ; i++ ) { // 임의의 X좌표와 색을 반환 kGetRandomXY( &iX1, &iY1 ); stColor1 = kGetRandomColor(); // 원 그리기 kDrawCircle( iX1, iY1, ABS( kRandom() % 50 + 1 ), stColor1, kRandom() % 2 ); } // 텍스트 표시 for( i = 0 ; i < 100 ; i++ ) { // 임의의 X좌표와 색을 반환 kGetRandomXY( &iX1, &iY1 ); stColor1 = kGetRandomColor(); stColor2 = kGetRandomColor(); // 텍스트 출력 kDrawText( iX1, iY1, stColor1, stColor2, vpcString[ 4 ], kStrLen( vpcString[ 4 ] ) ); } } while( kGetCh() != 'q' ); //========================================================================== // 윈도우 프로토타입을 출력 //========================================================================== // q 키를 눌러서 빠져 나왔다면 윈도우 프로토타입을 표시함 while( 1 ) { // 배경을 출력 kDrawRect(0, 0, 1024, 768, RGB( 232, 255, 232 ), TRUE ); // 윈도우 프레임을 3개 그림 for( i = 0 ; i < 3 ; i++ ) { kGetRandomXY( &iX1, &iY1 ); kDrawWindowFrame( iX1, iY1, 400, 200, "MINT64 OS Test Window" ); } kGetCh(); } }