RingD.h 3.95 KB
Newer Older
1
/**************************************************************************
atraczyk's avatar
atraczyk committed
2
* Copyright (C) 2016 by Savoir-faire Linux                                *
3 4
* Author: Jäger Nicolas <nicolas.jager@savoirfairelinux.com>              *
* Author: Traczyk Andreas <traczyk.andreas@savoirfairelinux.com>          *
atraczyk's avatar
atraczyk committed
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
*                                                                         *
* 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/>.   *
**************************************************************************/

using namespace concurrency;

namespace RingClientUWP
{

/* delegate */
delegate void IncomingCall(String^ accountId, String^ callId, String^ from);
Nicolas Jager's avatar
Nicolas Jager committed
27
delegate void StateChange(String^ callId, CallStatus state, int code);
28
delegate void IncomingAccountMessage(String^ accountId, String^ from, String^ payload);
29
delegate void CallPlaced(String^ callId);
30

atraczyk's avatar
atraczyk committed
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54

public ref class RingD sealed
{
public:
    /* functions */

    /* properties */
    static property RingD^ instance
    {
        RingD^ get()
        {
            static RingD^ instance_ = ref new RingD();
            return instance_;
        }
    }

    property bool daemonRunning
    {
        bool get()
        {
            return daemonRunning_;
        }
    }

55 56
    void cancelOutGoingCall2(String^ callId); // marche

57 58 59 60 61 62 63 64 65
internal: // why this property has to be internal and not public ?
    property Vector<String^>^ _callIdsList
    {
        Vector<String^>^ get()
        {
            return callIdsList_;
        }
    }

66

atraczyk's avatar
atraczyk committed
67 68 69 70
internal:
    /* functions */
    void startDaemon();
    void reloadAccountList();
Nicolas Jager's avatar
Nicolas Jager committed
71
    void sendAccountTextMessage(String^ message);
atraczyk's avatar
atraczyk committed
72 73
    void createRINGAccount(String^ alias);
    void createSIPAccount(String^ alias);
74 75
    void refuseIncommingCall(String^ call);
    void acceptIncommingCall(String^ call);
Nicolas Jager's avatar
Nicolas Jager committed
76
    void placeCall(Contact^ contact);
77
    /*void cancelOutGoingCall2(String^ callId);*/ // marche pas
78
    CallStatus getCallStatus(String^ state);
79 80

    void hangUpCall2(String^ callId);
atraczyk's avatar
atraczyk committed
81 82 83 84 85 86 87 88

    /* TODO : move members */
    bool hasConfig;
    std::string accountName;

    /* events */
    event IncomingCall^ incomingCall;
    event StateChange^ stateChange;
89
    event IncomingAccountMessage^ incomingAccountMessage;
90
    event CallPlaced^ callPlaced;
atraczyk's avatar
atraczyk committed
91 92 93

private:
    /* sub classes */
94 95 96
    enum class Request {
        None,
        AddRingAccount,
97 98
        AddSIPAccount,
        RefuseIncommingCall,
Nicolas Jager's avatar
Nicolas Jager committed
99
        AcceptIncommingCall,
100 101
        CancelOutGoingCall,
        HangUpCall
102
    };
103 104 105 106


    Vector<String^>^ callIdsList_;

atraczyk's avatar
atraczyk committed
107 108
    ref class Task
    {
109
    internal:
110 111 112
        Task(Request r) {
            request = r;
        }
113
        Task(Request r, String^ c) {
114 115 116
            request = r;
            _callId = c;
        }
atraczyk's avatar
atraczyk committed
117 118
    public:
        property Request request;
119
        property String^ _callId;
atraczyk's avatar
atraczyk committed
120 121 122 123 124
    };

    /* functions */
    RingD(); // singleton
    void dequeueTasks();
125
//    CallStatus getCallStatus(String^ state);
atraczyk's avatar
atraczyk committed
126 127 128 129 130 131

    /* members */
    std::string localFolder_;
    bool daemonRunning_ = false;
    std::queue<Task^> tasksList_;
};
Nicolas Jager's avatar
Nicolas Jager committed
132
}