1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
#include "audiovideocallcontroller.h"
#include "globals.h"
#include "skynet.h"
#include <QByteArray>
#include <QDebug>
AudioVideoCallController::AudioVideoCallController(QObject *parent)
: QObject(parent), callwindow(0), is_active(false)
{
connect(skynet, SIGNAL(IncomingCall(QByteArray)), this, SLOT(call_from(QByteArray)));
connect(skynet, SIGNAL(CallFailed(QString)), this, SLOT(call_failed(QString)));
connect(skynet, SIGNAL(CallAccepted(QByteArray)), this, SLOT(call_accepted(QByteArray)));
connect(skynet, SIGNAL(CallRejected(QByteArray)), this, SLOT(call_rejected(QByteArray)));
connect(skynet, SIGNAL(CallHungup(QByteArray)), this, SLOT(call_hungup(QByteArray)));
}
void AudioVideoCallController::call_failed(QString reason)
{
qDebug() << "Call failed: " << reason << "\n";
}
void AudioVideoCallController::call_accepted(QByteArray peer_id)
{
}
void AudioVideoCallController::call_rejected(QByteArray peer_id)
{
}
void AudioVideoCallController::call_hungup(QByteArray peer_id)
{
}
void AudioVideoCallController::start_call(QByteArray peer_id)
{
if (callwindow)
{
/* call is already in progress */
return;
}
m_peer_id = peer_id;
callwindow = new CallWindow(peer_id, false);
connect(callwindow, SIGNAL(start_call_pressed()), this, SLOT(initiate_call()));
connect(callwindow, SIGNAL(hang_call_pressed()), this, SLOT(end_call()));
callwindow->show();
}
void AudioVideoCallController::call_from(QByteArray peer_id)
{
if (callwindow)
{
/* HANDLE BUSY CASE!!! */
/* call is already in progress */
return;
}
m_peer_id = peer_id;
callwindow = new CallWindow(peer_id, true);
connect(callwindow, SIGNAL(accept_call_pressed()), this, SLOT(accept_call()));
connect(callwindow, SIGNAL(hang_call_pressed()), this, SLOT(end_call()));
callwindow->show();
/* play ring tone */
}
void AudioVideoCallController::initiate_call()
{
skynet->StartCall(m_peer_id);
}
void AudioVideoCallController::accept_call()
{
skynet->AcceptCall(m_peer_id);
}
void AudioVideoCallController::end_call()
{
if (is_active)
skynet->HangupCall(m_peer_id);
else
skynet->RejectCall(m_peer_id);
}
|