diff options
Diffstat (limited to 'index.js')
| -rw-r--r-- | index.js | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/index.js b/index.js new file mode 100644 index 0000000..a717a41 --- /dev/null +++ b/index.js | |||
| @@ -0,0 +1,83 @@ | |||
| 1 | const express = require("express"); | ||
| 2 | const app = express(); | ||
| 3 | const socket = require("socket.io"); | ||
| 4 | const cors = require("cors"); | ||
| 5 | const axios = require("axios"); | ||
| 6 | |||
| 7 | const port = 8001; | ||
| 8 | |||
| 9 | app.use(express()); | ||
| 10 | app.use(cors()); | ||
| 11 | |||
| 12 | var server = app.listen( | ||
| 13 | port, | ||
| 14 | console.log(`Server is running on port: ${port} `) | ||
| 15 | ); | ||
| 16 | |||
| 17 | const io = socket(server); | ||
| 18 | |||
| 19 | io.use((socket, next) => { | ||
| 20 | let token = socket.handshake.auth.token; | ||
| 21 | |||
| 22 | let config = { | ||
| 23 | headers: { | ||
| 24 | Authorization: `Token ${token}`, | ||
| 25 | } | ||
| 26 | } | ||
| 27 | |||
| 28 | axios.get( | ||
| 29 | 'http://127.0.0.1:8000/api/auth/info/', | ||
| 30 | config | ||
| 31 | ) | ||
| 32 | .then((res) => { | ||
| 33 | if(res.status === 200) { | ||
| 34 | socket.userInfo = res.data.user; | ||
| 35 | socket._config = config; | ||
| 36 | socket.roomID = null; | ||
| 37 | next(); | ||
| 38 | } | ||
| 39 | }) | ||
| 40 | .catch(error => { }); | ||
| 41 | |||
| 42 | return next(new Error("Invalid token")) | ||
| 43 | }); | ||
| 44 | |||
| 45 | |||
| 46 | io.on("connection", (socket) => { | ||
| 47 | console.log(`${socket.userInfo.username}, connected!`); | ||
| 48 | |||
| 49 | socket.on('send_group_message', ({message, group}) => { | ||
| 50 | axios.post( | ||
| 51 | `http://127.0.0.1:8000/api/chat/groups/detail/${group.id}/messages/`, | ||
| 52 | {message: message}, | ||
| 53 | socket._config | ||
| 54 | ).then(res => { | ||
| 55 | res_message = res.data | ||
| 56 | |||
| 57 | user_message = {...res_message} | ||
| 58 | other_message = {...res_message} | ||
| 59 | |||
| 60 | user_message["is_mine"] = true | ||
| 61 | other_message["is_mine"] = false | ||
| 62 | |||
| 63 | socket.emit("receive_group_message", {message: user_message}); | ||
| 64 | socket.broadcast.to(group.id).emit("receive_group_message", {message: other_message}); | ||
| 65 | }).catch(err => { }) | ||
| 66 | }); | ||
| 67 | |||
| 68 | socket.on('join_group', ({group_id}) => { | ||
| 69 | axios.get( | ||
| 70 | `http://127.0.0.1:8000/api/chat/groups/detail/${group_id}/`, | ||
| 71 | socket._config | ||
| 72 | ) | ||
| 73 | .then((res) => { | ||
| 74 | if(res.status === 200) | ||
| 75 | socket.join(group_id); | ||
| 76 | }).catch(error => { }); | ||
| 77 | }) | ||
| 78 | |||
| 79 | |||
| 80 | socket.on("disconnect", () => { | ||
| 81 | console.log(`${socket.userInfo.username} disconnected!`); | ||
| 82 | }); | ||
| 83 | }); | ||
