diff --git a/CMakeLists.txt b/CMakeLists.txt index 0a6323edb..b91b99d62 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,6 +11,7 @@ include (CheckIncludeFile) set(HEADERS src/3rdparty/align.h src/App.h + src/Console.h src/Cpu.h src/interfaces/IClientListener.h src/interfaces/IJobResultListener.h @@ -58,6 +59,7 @@ set(HEADERS_CRYPTO set(SOURCES src/App.cpp + src/Console.cpp src/log/ConsoleLog.cpp src/log/FileLog.cpp src/log/Log.cpp @@ -65,10 +67,10 @@ set(SOURCES src/net/Client.cpp src/net/Job.cpp src/net/Network.cpp - src/net/Url.cpp src/net/strategies/DonateStrategy.cpp src/net/strategies/FailoverStrategy.cpp src/net/strategies/SinglePoolStrategy.cpp + src/net/Url.cpp src/Options.cpp src/Summary.cpp src/workers/DoubleWorker.cpp diff --git a/src/App.cpp b/src/App.cpp index aff9ee954..b7b66556c 100644 --- a/src/App.cpp +++ b/src/App.cpp @@ -27,6 +27,7 @@ #include "App.h" +#include "Console.h" #include "Cpu.h" #include "crypto/CryptoNight.h" #include "log/ConsoleLog.h" @@ -50,6 +51,7 @@ App *App::m_self = nullptr; App::App(int argc, char **argv) : + m_console(nullptr), m_network(nullptr), m_options(nullptr) { @@ -62,6 +64,7 @@ App::App(int argc, char **argv) : if (!m_options->background()) { Log::add(new ConsoleLog(m_options->colors())); + m_console = new Console(); } if (m_options->logFile()) { @@ -82,6 +85,7 @@ App::App(int argc, char **argv) : App::~App() { + delete m_console; } diff --git a/src/App.h b/src/App.h index 99eac4329..106a3267a 100644 --- a/src/App.h +++ b/src/App.h @@ -28,6 +28,7 @@ #include +class Console; class Network; class Options; @@ -48,6 +49,7 @@ private: static App *m_self; + Console *m_console; Network *m_network; Options *m_options; uv_signal_t m_signal; diff --git a/src/Console.cpp b/src/Console.cpp new file mode 100644 index 000000000..7772aec07 --- /dev/null +++ b/src/Console.cpp @@ -0,0 +1,55 @@ +/* XMRig + * Copyright 2010 Jeff Garzik + * Copyright 2012-2014 pooler + * Copyright 2014 Lucas Jones + * Copyright 2014-2016 Wolf9466 + * Copyright 2016 Jay D Dee + * Copyright 2016-2017 XMRig + * + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + + +#include "Console.h" + + +Console::Console() +{ + m_tty.data = this; + uv_tty_init(uv_default_loop(), &m_tty, 0, 1); + uv_tty_set_mode(&m_tty, UV_TTY_MODE_RAW); + + uv_read_start(reinterpret_cast(&m_tty), Console::onAllocBuffer, Console::onRead); +} + + +void Console::onAllocBuffer(uv_handle_t *handle, size_t suggested_size, uv_buf_t *buf) +{ + auto console = static_cast(handle->data); + buf->len = 1; + buf->base = console->m_buf; +} + + +void Console::onRead(uv_stream_t *stream, ssize_t nread, const uv_buf_t *buf) +{ + if (nread < 0) { + return uv_close(reinterpret_cast(stream), nullptr); + } + + if (nread == 1) { + printf("%c\n", buf->base[0]); + } +} diff --git a/src/Console.h b/src/Console.h new file mode 100644 index 000000000..3726a066d --- /dev/null +++ b/src/Console.h @@ -0,0 +1,45 @@ +/* XMRig + * Copyright 2010 Jeff Garzik + * Copyright 2012-2014 pooler + * Copyright 2014 Lucas Jones + * Copyright 2014-2016 Wolf9466 + * Copyright 2016 Jay D Dee + * Copyright 2016-2017 XMRig + * + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef __CONSOLE_H__ +#define __CONSOLE_H__ + + +#include + + +class Console +{ +public: + Console(); + +private: + static void onAllocBuffer(uv_handle_t *handle, size_t suggested_size, uv_buf_t *buf); + static void onRead(uv_stream_t *stream, ssize_t nread, const uv_buf_t *buf); + + char m_buf[1]; + uv_tty_t m_tty; +}; + + +#endif /* __CONSOLE_H__ */