blob: 61e0c2d58cd0d76c20c6cb7beda53bb06274629c [file] [log] [blame]
Nicolas Jagereeef17c2016-08-16 10:21:54 -04001/***************************************************************************
2* Copyright (C) 2016 by Savoir-faire Linux *
3* Author: Jäger Nicolas <nicolas.jager@savoirfairelinux.com> *
4* *
5* This program is free software; you can redistribute it and/or modify *
6* it under the terms of the GNU General Public License as published by *
7* the Free Software Foundation; either version 3 of the License, or *
8* (at your option) any later version. *
9* *
10* This program is distributed in the hope that it will be useful, *
11* but WITHOUT ANY WARRANTY; without even the implied warranty of *
12* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13* GNU General Public License for more details. *
14* *
15* You should have received a copy of the GNU General Public License *
16* along with this program. If not, see <http://www.gnu.org/licenses/>. *
17**************************************************************************/
18#pragma once
19
Nicolas Jagere30847e2016-10-14 14:05:24 -040020using namespace Windows::Storage;
21
Nicolas Jagereeef17c2016-08-16 10:21:54 -040022namespace RingClientUWP
23{
24
25/* forward declaration */
26ref class RingDebug;
27
28/* delegate */
29delegate void debugMessageToScreen(Platform::String^ message);
30
31/* this is how to implement a singleton class*/
32public ref class RingDebug sealed
33{
34public:
35 /* singleton */
36 static property RingDebug^ instance
37 {
38 RingDebug^ get()
39 {
40 static RingDebug^ instance_ = ref new RingDebug();
41 return instance_;
42 }
43 }
44
Nicolas Jagere30847e2016-10-14 14:05:24 -040045 property StorageFile^ _logFile;
46
Nicolas Jagereeef17c2016-08-16 10:21:54 -040047 /* properties */
48
49 /* functions */
50internal:
51 enum class Type { MSG, WNG, ERR };
52 void print(const std::string& message, const Type& type = Type::MSG);
53
54 /* event */
55 event debugMessageToScreen^ messageToScreen;
56
57private:
Nicolas Jagere30847e2016-10-14 14:05:24 -040058 RingDebug(); // singleton
Nicolas Jagereeef17c2016-08-16 10:21:54 -040059};
60
atraczyk14ba30c2016-09-22 18:31:59 -040061void WriteLine(String^ str)
62{
63 std::wstringstream wStringstream;
64 wStringstream << str->Data() << "\n";
65 OutputDebugString(wStringstream.str().c_str());
66}
67
68void WriteException(Exception^ ex)
69{
70 std::wstringstream wStringstream;
71 wStringstream << "0x" << ex->HResult << ": " << ex->Message->Data();
72 OutputDebugString(wStringstream.str().c_str());
73}
74
Nicolas Jager9edbea32016-10-03 09:13:53 -040075#define MSG_(cstr) CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(CoreDispatcherPriority::High, \
Nicolas Jagereeef17c2016-08-16 10:21:54 -040076ref new DispatchedHandler([=]() { RingDebug::instance->print(cstr); }))
77
Nicolas Jager9edbea32016-10-03 09:13:53 -040078#define WNG_(cstr) CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(CoreDispatcherPriority::High, \
Nicolas Jagereeef17c2016-08-16 10:21:54 -040079ref new DispatchedHandler([=]() { RingDebug::instance->print(std::string(cstr), RingDebug::Type::WNG); }))
80
Nicolas Jager9edbea32016-10-03 09:13:53 -040081#define ERR_(cstr) CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(CoreDispatcherPriority::High, \
Nicolas Jagereeef17c2016-08-16 10:21:54 -040082ref new DispatchedHandler([=]() { RingDebug::instance->print(std::string(cstr), RingDebug::Type::ERR); }))
83
Nicolas Jager32ed1a22016-08-17 08:36:02 -040084}