Pemrograman Jaringan
Dosen Pengampu:
Muhamad Radzi Rathomi, S.Kom.,M.Cs
Disusun Oleh:
Friska Emelia Tindaon(160155201015)
Kemudian dilanjutkan membuat kode untuk handle pesan yaitu berupa handle
login,offer(penawaran/menelpon),answer(menjawab),candidate(orang yang
dituju),leave(untuk meninggalkan panggilan)
Pada kode selanjutnya terdapat setup untuk video stream dan audio stream
Server.js
try {
data = JSON.parse(message);
} catch (e) {
console.log("Invalid JSON");
data = {};
switch (data.type) {
if (users[data.name]) {
sendTo(connectedUser, {
type: "login",
success: false
});
} else {
users[data.name] = connectedUser;
connectedUser.name = data.name;
sendTo(connectedUser, {
type: "login",
success: true
});
break;
case "offer":
connectedUser.otherName = data.name;
sendTo(conn, {
type: "offer",
offer: data.offer,
name: connectedUser.name
});
break;
case "answer":
if (conn != null) {
connectedUser.otherName = data.name;
sendTo(conn, {
type: "answer",
answer: data.answer
});
break;
case "candidate":
if (conn != null) {
sendTo(conn, {
type: "candidate",
candidate: data.candidate
});
break;
case "leave":
conn.otherName = null;
if (conn != null) {
sendTo(conn, {
type: "leave"
});
}
break;
default:
console.log("sendto", data.name);
sendTo(connectedUser, {
type: "error",
});
break;
console.log(data);
})
})
receiver.send(JSON.stringify(msg))
Index.html
<html>
<head>
<link rel="stylesheet"
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/css/bootstrap.min.css">
</head>
<style>
body {
background: #eee;
padding: 5% 0;
video {
background: black;
.call-page {
position: relative;
display: block;
margin: 0 auto;
width: 500px;
height: 500px;
#localVideo {
width: 150px;
height: 150px;
position: absolute;
top: 15px;
right: 15px;
#remoteVideo {
width: 500px;
height: 500px;
</style>
<body>
Sign in</button>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>
Client.js
//our username
var name;
var connectedUser;
conn.onopen = function () {
};
switch(data.type) {
case "login":
handleLogin(data.success);
break;
case "offer":
handleOffer(data.offer, data.name);
break;
case "answer":
handleAnswer(data.answer);
break;
case "candidate":
handleCandidate(data.candidate);
break;
case "leave":
handleLeave();
break;
default:
break;
};
};
function send(message) {
if (connectedUser) {
message.name = connectedUser;
console.log(JSON.stringify(message));
conn.send(JSON.stringify(message));
};
//******
//******
var yourConn;
var stream;
callPage.style.display = "none";
if (name.length > 0) {
send({
type: "login",
name: name
});
});
function handleLogin(success) {
} else {
loginPage.style.display = "none";
callPage.style.display = "block";
//**********************
//**********************
stream = myStream;
//displaying local video stream on the page
localVideo.srcObject = stream;
var configuration = {
};
yourConn.addStream(stream);
remoteVideo.srcObject = e.stream;
};
if (event.candidate) {
send({
type: "candidate",
candidate: event.candidate
});
}
};
}, function (error) {
console.log(error);
});
};
//initiating a call
callBtn.addEventListener("click", function () {
if (callToUsername.length > 0) {
connectedUser = callToUsername;
// create an offer
yourConn.createOffer(function (offer) {
send({
type: "offer",
offer: offer
});
yourConn.setLocalDescription(offer);
}, function (error) {
alert("Error when creating an offer");
});
});
connectedUser = name;
yourConn.setRemoteDescription(new RTCSessionDescription(offer));
yourConn.createAnswer(function (answer) {
yourConn.setLocalDescription(answer);
send({
type: "answer",
answer: answer
});
}, function (error) {
});
};
function handleAnswer(answer) {
yourConn.setRemoteDescription(new RTCSessionDescription(answer));
};
function handleCandidate(candidate) {
yourConn.addIceCandidate(new RTCIceCandidate(candidate));
};
//hang up
hangUpBtn.addEventListener("click", function () {
send({
type: "leave"
});
handleLeave();
});
function handleLeave() {
connectedUser = null;
remoteVideo.src = null;
yourConn.close();
yourConn.onicecandidate = null;
yourConn.onaddstream = null;
};
http-server.js
app.use(express.static(staticDir));
// app.use(express.static('public'));
Package.json
"name": "webrtc",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
},
"author": "",
"license": "ISC",
"dependencies": {
"express": "^4.16.4",
"jquery": "^3.4.0",
"popper.js": "^1.15.0"
}
Demo VideoChat
5. Maka setelah itu akan muncul seperti gambar dibawah ini isi kotak
tersebut dengan nama yang ingin dipanggil.
6. Klik call maka pemanggil dan penerima telepon video akan
tersambung.