-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathapp.js
103 lines (88 loc) · 3.17 KB
/
app.js
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
const port = process.env.PORT || 8000;
var express=require("express");
const app = express();
const socketIO=require('socket.io');
var online_users=[];
var forumRepository=require("./repository/forum_repository")
var bodyParser = require('body-parser');
app.use(express.json());
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(function (req, res, next) {
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Methods', 'GET, PUT, POST, DELETE, OPTIONS');
res.header('Access-Control-Allow-Headers', 'Accept, Origin, Content-Type, access_token,Authorization');
res.header('Access-Control-Allow-Credentials',true);
next();
});
app.use('/forum', require('./routes/forum_routes'));
app.use('/auth', require('./routes/users_routes'));
data = {
success:true,
msg: "Welcome on Forum API",
};
app.route("/").get((req, res) => res.json(data));
var server=app.listen(port, "0.0.0.0", () =>
console.log(`welcome your listening at port ${port}`)
);
const io=socketIO(server);
//// disini proses socket realtime nya
io.on("connection", function (socket) {
socket.on("online_users",(data)=>{
///ketika koneksi terhubung dari frontend langsung kirim event online_user
/// berisi nama dan id kemudian di binding ke variable online_users
online_users.push({
"id":data["id"],
"name":data["name"],
"socket_id":socket.id
});
///socket id perlu jika kita mengirimkan pesan ke user tertentu
/// ketika sudah di binding ,server akan mengirimkan event online_users serta variable
//array online_users
socket.emit("online_users",online_users);
});
///delete user dari online_users ketika event offline_user diterima
socket.on("offline_users",(data)=>{
for(let i=0; i < online_users.length; i++){
if(online_users[i].id=== data["id"].toString()){
online_users.splice(i,1);
}
}
socket.emit("online_users",online_users);
});
socket.on('disconnect',()=>{
// event disconnect untuk delete users yang sudah tidak aktif pada variable
//online_users
for(let i=0; i < online_users.length; i++){
if(online_users[i].socket_id === socket.id){
online_users.splice(i,1);
}
}
socket.emit('online_users',online_users);
});
socket.on("question",async(data)=>{
var list=await forumRepository.add_question(data.data);
var broadcast_data={
"notification":data.notification,
"data":list[0]
}
socket.emit("question",broadcast_data);
});
socket.on("answer",async(data)=>{
var list=await forumRepository.add_answer(data.data);
var broadcast_data={
"notification":data.notification,
"data":list[0]
}
console.log("mengirim data answer");
socket.emit("answer",broadcast_data);
for(var i=0;i<online_users.length;i++){
if(online_users[i].id.toString()==data.data.user_id.toString()){
console.log("mengirim data notifikasi");
///kirim event ke pengguna tertentu berdasarkan socket id
io.to(online_users[i].socket_id).emit("notification",broadcast_data);
}
}
});
console.log("Made socket connection");
});