Print errors from local log to chat
authorPerttu Ahola <celeron55@gmail.com>
Sun, 27 Nov 2011 12:29:48 +0000 (14:29 +0200)
committerPerttu Ahola <celeron55@gmail.com>
Tue, 29 Nov 2011 17:13:56 +0000 (19:13 +0200)
src/game.cpp
src/logoutputbuffer.h [new file with mode: 0644]

index 1c555dbee631d3288461c7c0ff413c38cd065d51..5bbd92d55494a267651dfee22c60efe27cb4252b 100644 (file)
@@ -49,6 +49,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include "main.h" // For g_settings
 #include "tooldef.h"
 #include "tile.h" // For TextureSource
+#include "logoutputbuffer.h"
 
 /*
        Setting this to 1 enables a special camera mode that forces
@@ -642,6 +643,9 @@ void the_game(
        // Create node definition manager
        IWritableNodeDefManager *nodedef = createNodeDefManager();
 
+       // Add chat log output for errors to be shown in chat
+       LogOutputBuffer chat_log_error_buf(LMT_ERROR);
+
        /*
                Create server.
                SharedPtr will delete it when it goes out of scope.
@@ -2122,7 +2126,13 @@ void the_game(
                        Get chat messages from client
                */
                {
-                       // Get new messages
+                       // Get new messages from error log buffer
+                       while(!chat_log_error_buf.empty())
+                       {
+                               chat_lines.push_back(ChatLine(narrow_to_wide(
+                                               chat_log_error_buf.get())));
+                       }
+                       // Get new messages from client
                        std::wstring message;
                        while(client.getChatMessage(message))
                        {
diff --git a/src/logoutputbuffer.h b/src/logoutputbuffer.h
new file mode 100644 (file)
index 0000000..ffbaea4
--- /dev/null
@@ -0,0 +1,58 @@
+/*
+Minetest-c55
+Copyright (C) 2011 celeron55, Perttu Ahola <celeron55@gmail.com>
+
+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 2 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, write to the Free Software Foundation, Inc.,
+51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+
+#ifndef LOGOUTPUTBUFFER_HEADER
+#define LOGOUTPUTBUFFER_HEADER
+
+#include "log.h"
+#include <queue>
+
+class LogOutputBuffer : public ILogOutput
+{
+public:
+       LogOutputBuffer(LogMessageLevel maxlev)
+       {
+               log_add_output(this, maxlev);
+       }
+       ~LogOutputBuffer()
+       {
+               log_remove_output(this);
+       }
+       virtual void printLog(const std::string &line)
+       {
+               m_buf.push(line);
+       }
+       std::string get()
+       {
+               if(empty())
+                       return "";
+               std::string s = m_buf.front();
+               m_buf.pop();
+               return s;
+       }
+       bool empty()
+       {
+               return m_buf.empty();
+       }
+private:
+       std::queue<std::string> m_buf;
+};
+
+#endif
+