From 09146d7e71215d548d9d1dcde215e9bcabc3e607 Mon Sep 17 00:00:00 2001 From: moparisthebest Date: Thu, 28 Jul 2011 16:16:11 -0400 Subject: [PATCH] Dedicated getline() thread on windows for async reading of stdin. --- java_client/build_all.sh | 7 +++ java_client/java_client.cpp | 55 +++++++++---------- .../moparscape/res/impl/BTDownloaderCRCs.java | 2 +- 3 files changed, 33 insertions(+), 31 deletions(-) diff --git a/java_client/build_all.sh b/java_client/build_all.sh index 92cf1a0..a59eaff 100755 --- a/java_client/build_all.sh +++ b/java_client/build_all.sh @@ -1,5 +1,12 @@ #!/bin/bash # all working at revision 5346 +if [ "$1" == "win" ]; then + echo "building windows then pushing to killer3" + bjam gcc-win32 "cflags=-DTORRENT_USE_I2P=0 -DBOOST_NO_EXCEPTIONS=1" link=static boost=source target-os=windows encryption=tommath variant=release geoip=off logging=none threadapi=win32 iconv=off deprecated-functions=off java_client + i586-mingw32msvc-strip bin/gcc-mingw-win32/release/boost-source/deprecated-functions-off/iconv-off/link-static/target-os-windows/threadapi-win32/threading-multi/java_client.exe + scp bin/gcc-mingw-win32/release/boost-source/deprecated-functions-off/iconv-off/link-static/target-os-windows/threadapi-win32/threading-multi/java_client.exe mopar@killer3:/home/mopar/java_client/java_client.win32.exe + exit 0 +fi if [ "$1" == "clean" ]; then echo "cleaning previous builds" rm -rf ./bin/ /home/mopar/biggerdaddy/libtorrent/libtorrent-rasterbar-trunk/trunk/bin /home/mopar/biggerdaddy/libtorrent/boost_1_46_0/bin.v2/ diff --git a/java_client/java_client.cpp b/java_client/java_client.cpp index 23db9fd..03241bb 100644 --- a/java_client/java_client.cpp +++ b/java_client/java_client.cpp @@ -79,42 +79,37 @@ void debug( const char* format, ... ) { #endif #include -#include +#include + +std::string thread_char; +bool thread_running = false; + +void Thread( void* pParams ) +{ + // waits for enter to be pressed, doesn't include newline + //std::cin >> thread_char; + std::getline(std::cin, thread_char); + thread_running = false; +} bool sleep_and_input(char* c, int sleep) { - void *input = GetStdHandle(STD_INPUT_HANDLE); - int wait_result = WaitForSingleObject(input, sleep*1000); - if (wait_result == WAIT_TIMEOUT) { - /* it timed out - no input */ - debug("wait timed out, no input"); + if(thread_running){ + Sleep(sleep*1000); return false; - } else if (wait_result == WAIT_OBJECT_0){ - /* it signaled in time - input available */ - *c = _getch(); + } + if(!thread_char.empty()){ + //strncpy(c, &thread_char, 1); + thread_char.copy(c,1,0); + thread_char.clear(); + // we don't want to start the thread again here, since after we return from + // this function we might want to read from stdin someplace else return true; - } else if (wait_result == WAIT_FAILED || wait_result == WAIT_ABANDONED) { - /* some shit went wrong */ - debug("somethting went wrong with wait"); - return false; } + thread_running = true; + _beginthread(Thread, 0, NULL); return false; }; -/* -bool sleep_and_input(char* c, int sleep) -{ - for (int i = 0; i < sleep * 2; ++i) - { - if (_kbhit()) - { - *c = _getch(); - return true; - } - Sleep(500); - } - return false; -}; -*/ #else #define EXE "" @@ -193,7 +188,7 @@ void signal_callback_handler(int signum){ const std::string tag_delim(": "); -int die_timeout = 10; +int die_timeout = 5; int allocation_mode = libtorrent::storage_mode_sparse; //float preferred_ratio = 0.f; float preferred_ratio = 1.f; @@ -469,7 +464,7 @@ void fatal_error(const char* error = 0){ " seconds between screen refreshes, default 1.\n" " -q forces the client to print every -F seconds, instead of\n" " only when with 'r' is pressed\n" - " -e Waits (timeout * -F) and quits if 'r' is not pressed, default 10.\n" + " -e Waits (timeout * -F) and quits if 'r' is not pressed, default 5.\n" " -n announce to trackers in all tiers\n" " -t announce to all trackers\n" " -h allow multiple connections from the same IP\n" diff --git a/src/org/moparscape/res/impl/BTDownloaderCRCs.java b/src/org/moparscape/res/impl/BTDownloaderCRCs.java index a1b2c4f..5b1403b 100644 --- a/src/org/moparscape/res/impl/BTDownloaderCRCs.java +++ b/src/org/moparscape/res/impl/BTDownloaderCRCs.java @@ -25,7 +25,7 @@ package org.moparscape.res.impl; */ public class BTDownloaderCRCs { - private static final long[] crcs = new long[]{1388496215L /*-java_client.linux.x86*/, 3350772002L /*-java_client.osx.i386*/, 1847997845L /*-java_client.osx.ppc*/, 3985172341L /*-java_client.win32.exe*/}; + private static final long[] crcs = new long[]{3304301470L /*-java_client.linux.x86*/, 21879546L /*-java_client.osx.i386*/, 4003616367L /*-java_client.osx.ppc*/, 3354565870L /*-java_client.win32.exe*/}; public static final int LINUX = 0; public static final int OSX386 = 1;