Commit 8e02d479 authored by D-AIRY's avatar D-AIRY

Fixed console output handling

parent d13adb4e
......@@ -749,12 +749,7 @@ bool ConsoleConnect(const char *szName, bool bNewInstance)
FreeConsole();
hOut = _open_osfhandle(ConnectSocket, O_RDONLY | O_RDWR | O_WRONLY | _O_APPEND);
fOut = ::fdopen(hOut, "a+");
::setvbuf(fOut, NULL, _IONBF, 0);
*stdout = *fOut;
*stderr = *fOut;
Core_SetOutPtr();
g_bRunning = true;
//_beginthread(ConsoleRecv, 0, 0);
......@@ -768,19 +763,14 @@ void ConsoleDisconnect()
g_bRunning = false;
if(fOut)
{
fclose(fOut);
}
/*int iResult = shutdown(ConnectSocket, SD_SEND);
int iResult = shutdown(ConnectSocket, SD_SEND);
if(iResult == SOCKET_ERROR)
{
printf("shutdown failed with error: %d\n", WSAGetLastError());
goto end;
}*/
//end:
//closesocket(ConnectSocket);
}
end:
closesocket(ConnectSocket);
WSACleanup();
//Sleep(1000);
CommandDisconnect();
......
......@@ -470,24 +470,44 @@ SX_LIB_API void Core_0ConsoleExecCmd(const char * format, ...); //!< Добав
SX_LIB_API UINT_PTR Core_ConsoleGetOutHandler();
/*! Устанавливает поток вывода. Для работы консоли
\warning Должна быть инлайнова, чтобы выполняться в контексте вызывающей библиотеки
*/
__inline void Core_SetOutPtr()
class COutPtr
{
UINT_PTR sock = Core_ConsoleGetOutHandler();
if(sock == ~0)
friend void Core_SetOutPtr();
COutPtr()
{
UINT_PTR sock = Core_ConsoleGetOutHandler();
if(sock == ~0)
{
return;
}
int hOut = _open_osfhandle(sock, O_RDONLY | O_RDWR | O_WRONLY | _O_APPEND);
m_fOut = ::_fdopen(_dup(hOut), "a+");
::setvbuf(m_fOut, NULL, _IONBF, 0);
m_fStdout = *stdout;
m_fStderr = *stderr;
*stdout = *m_fOut;
*stderr = *m_fOut;
}
~COutPtr()
{
return;
*stdout = m_fStdout;
*stderr = m_fStderr;
fclose(m_fOut);
}
int hOut = _open_osfhandle(sock, O_RDONLY | O_RDWR | O_WRONLY | _O_APPEND);
FILE * fOut = ::_fdopen(hOut, "a+");
::setvbuf(fOut, NULL, _IONBF, 0);
*stdout = *fOut;
*stderr = *fOut;
FILE *m_fOut;
FILE m_fStdout;
FILE m_fStderr;
};
fOut->_file = 1;
/*! Устанавливает поток вывода. Для работы консоли
\warning Должна быть инлайнова, чтобы выполняться в контексте вызывающей библиотеки
*/
__inline void Core_SetOutPtr()
{
static COutPtr s_optr;
}
//!@}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment