RingDebug.h 3.19 KB
Newer Older
Nicolas Jager's avatar
Nicolas Jager committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
/***************************************************************************
* Copyright (C) 2016 by Savoir-faire Linux                                *
* Author: Jger Nicolas <nicolas.jager@savoirfairelinux.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 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 <http://www.gnu.org/licenses/>.   *
**************************************************************************/
#pragma once

20 21
using namespace Windows::Storage;

Nicolas Jager's avatar
Nicolas Jager committed
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
namespace RingClientUWP
{

/* forward declaration */
ref class RingDebug;

/* delegate */
delegate void debugMessageToScreen(Platform::String^ message);

/* this is how to implement a singleton class*/
public ref class RingDebug sealed
{
public:
    /* singleton */
    static property RingDebug^ instance
    {
        RingDebug^ get()
        {
            static RingDebug^ instance_ = ref new RingDebug();
            return instance_;
        }
    }

45
    property StorageFile^ _logFile;
46
    property StorageFile^ _videoFile;
47

Nicolas Jager's avatar
Nicolas Jager committed
48 49 50 51 52 53 54
    /* properties */

    /* functions */
internal:
    enum class Type { MSG, WNG, ERR };
    void print(const std::string& message, const Type& type = Type::MSG);

55 56
    void WriteLine(String^ str);

Nicolas Jager's avatar
Nicolas Jager committed
57 58 59 60
    /* event */
    event debugMessageToScreen^ messageToScreen;

private:
61
    RingDebug(); // singleton
Nicolas Jager's avatar
Nicolas Jager committed
62 63
};

atraczyk's avatar
atraczyk committed
64 65 66 67 68 69 70 71 72 73 74 75 76 77
void WriteLine(String^ str)
{
    std::wstringstream wStringstream;
    wStringstream << str->Data() << "\n";
    OutputDebugString(wStringstream.str().c_str());
}

void WriteException(Exception^ ex)
{
    std::wstringstream wStringstream;
    wStringstream << "0x" << ex->HResult << ": " << ex->Message->Data();
    OutputDebugString(wStringstream.str().c_str());
}

78
#define MSG_(cstr) CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(CoreDispatcherPriority::High, \
Nicolas Jager's avatar
Nicolas Jager committed
79 80
ref new DispatchedHandler([=]() { RingDebug::instance->print(cstr); }))

81
#define WNG_(cstr) CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(CoreDispatcherPriority::High, \
Nicolas Jager's avatar
Nicolas Jager committed
82 83
ref new DispatchedHandler([=]() { RingDebug::instance->print(std::string(cstr), RingDebug::Type::WNG); }))

84
#define ERR_(cstr) CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(CoreDispatcherPriority::High, \
Nicolas Jager's avatar
Nicolas Jager committed
85 86
ref new DispatchedHandler([=]() { RingDebug::instance->print(std::string(cstr), RingDebug::Type::ERR); }))

Nicolas Jager's avatar
Nicolas Jager committed
87
}