summaryrefslogtreecommitdiffstats
path: root/index.js
blob: a717a4171e14a0b71f6a0293937b49232e2cb184 (plain)
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
const express = require("express");
const app = express();
const socket = require("socket.io");
const cors = require("cors");
const axios = require("axios");

const port = 8001;

app.use(express());
app.use(cors());

var server = app.listen(
  port,
  console.log(`Server is running on port: ${port} `)
);

const io = socket(server);

io.use((socket, next) => {
  let token = socket.handshake.auth.token;

  let config = {
    headers: {
      Authorization: `Token ${token}`,
    }
  }

  axios.get(
    'http://127.0.0.1:8000/api/auth/info/',
    config
  )
  .then((res) => {
    if(res.status === 200) {
      socket.userInfo = res.data.user;
      socket._config = config;
      socket.roomID = null;
      next();
    }
  })
  .catch(error => { });

  return next(new Error("Invalid token"))
});


io.on("connection", (socket) => {
  console.log(`${socket.userInfo.username}, connected!`);

  socket.on('send_group_message', ({message, group}) => {
    axios.post(
      `http://127.0.0.1:8000/api/chat/groups/detail/${group.id}/messages/`,
      {message: message},
      socket._config
    ).then(res => {
      res_message = res.data

      user_message = {...res_message}
      other_message = {...res_message}

      user_message["is_mine"] = true
      other_message["is_mine"] = false

      socket.emit("receive_group_message", {message: user_message});
      socket.broadcast.to(group.id).emit("receive_group_message", {message: other_message});
    }).catch(err => {  })
  });

  socket.on('join_group', ({group_id}) => {
    axios.get(
      `http://127.0.0.1:8000/api/chat/groups/detail/${group_id}/`,
      socket._config
    )
    .then((res) => {
      if(res.status === 200)
        socket.join(group_id);
    }).catch(error => { });
  })


  socket.on("disconnect", () => {
    console.log(`${socket.userInfo.username} disconnected!`);
  });
});