@@ -2,13 +2,16 @@ const requestHandler = require('./requestHandler')
2
2
3
3
const httpServer = require ( 'http' ) . createServer ( requestHandler )
4
4
5
+
5
6
const io = require ( "socket.io" ) ( httpServer , {
6
7
cors : {
7
8
origin : "http://localhost:8080" ,
8
9
} ,
9
10
} )
10
11
11
12
13
+ const db = require ( './db' )
14
+
12
15
const crypto = require ( "crypto" )
13
16
const randomId = ( ) => crypto . randomBytes ( 8 ) . toString ( "hex" )
14
17
@@ -18,69 +21,81 @@ const sessionStore = new InMemorySessionStore()
18
21
const { InMemoryMessageStore } = require ( "./messageStore" )
19
22
const messageStore = new InMemoryMessageStore ( )
20
23
21
- io . use ( ( socket , next ) => {
22
- const sessionID = socket . handshake . auth . sessionID
23
- if ( sessionID ) {
24
- const session = sessionStore . findSession ( sessionID )
25
- if ( session ) {
26
- socket . sessionID = sessionID
27
- socket . userID = session . userID
28
- socket . username = session . username
29
- return next ( )
30
- }
31
- }
32
- const username = socket . handshake . auth . username
33
- if ( ! username ) {
34
- return next ( new Error ( "invalid username" ) )
35
- }
36
- socket . sessionID = randomId ( )
37
- socket . userID = randomId ( )
38
- socket . username = username
39
- next ( )
40
- } )
24
+ // io.use((socket, next) => {
25
+ // const sessionID = socket.handshake.auth.sessionID
26
+ // console.log(sessionID)
27
+ // if (sessionID) {
28
+ // const session = sessionStore.findSession(sessionID)
29
+ // if (session) {
30
+ // socket.sessionID = sessionID
31
+ // socket.userID = session.userID
32
+ // socket.username = session.username
33
+ // return next()
34
+ // }
35
+ // }
36
+ // const username = socket.handshake.auth.username
37
+ // if (!username) {
38
+ // return next(new Error("invalid username"))
39
+ // }
40
+ // socket.sessionID = randomId()
41
+ // socket.userID = randomId()
42
+ // socket.username = username
43
+ // next()
44
+ // })
45
+
46
+ io . on ( "connection" , async ( socket ) => {
47
+
48
+
49
+ console . log ( socket . handshake . auth . sessionID )
50
+
51
+ let image = await db . findUserPhoto ( socket . handshake . auth . sessionID )
52
+ image = "http://localhost:3000/uploads/" + image
41
53
42
- io . on ( "connection" , ( socket ) => {
43
54
// persist session
44
- sessionStore . saveSession ( socket . sessionID , {
45
- userID : socket . userID ,
46
- username : socket . username ,
55
+ sessionStore . saveSession ( socket . handshake . auth . sessionID , {
56
+ sessionID : socket . handshake . auth . sessionID ,
57
+ username : socket . handshake . auth . username ,
47
58
connected : true ,
59
+ image : image
48
60
} )
49
61
50
- // emit session details
51
- socket . emit ( "session" , {
52
- sessionID : socket . sessionID ,
53
- userID : socket . userID ,
54
- } )
62
+ // // emit session details
63
+ // socket.emit("session", {
64
+ // sessionID: socket.sessionID,
65
+ // userID: socket.userID,
66
+ // })
55
67
56
68
// join the "userID" room
57
- socket . join ( socket . userID )
69
+ socket . join ( socket . handshake . auth . sessionID )
58
70
59
71
// fetch existing users
60
72
const users = [ ]
61
73
const messagesPerUser = new Map ( )
62
- messageStore . findMessagesForUser ( socket . userID ) . forEach ( ( message ) => {
74
+ messageStore . findMessagesForUser ( socket . handshake . auth . sessionID ) . forEach ( ( message ) => {
63
75
const { from, to } = message
64
- const otherUser = socket . userID === from ? to : from
76
+ const otherUser = socket . handshake . auth . sessionID === from ? to : from
65
77
if ( messagesPerUser . has ( otherUser ) ) {
66
78
messagesPerUser . get ( otherUser ) . push ( message )
67
79
} else {
68
80
messagesPerUser . set ( otherUser , [ message ] )
69
81
}
70
82
} )
71
83
sessionStore . findAllSessions ( ) . forEach ( ( session ) => {
84
+
85
+ console . log ( session . sessionID )
72
86
users . push ( {
73
- userID : session . userID ,
87
+ sessionID : session . sessionID ,
74
88
username : session . username ,
75
89
connected : session . connected ,
76
- messages : messagesPerUser . get ( session . userID ) || [ ] ,
90
+ image : session . image ,
91
+ messages : messagesPerUser . get ( session . sessionID ) || [ ] ,
77
92
} )
78
93
} )
79
94
socket . emit ( "users" , users )
80
95
81
96
// notify existing users
82
97
socket . broadcast . emit ( "user connected" , {
83
- userID : socket . userID ,
98
+ sessionID : socket . handshake . auth . sessionID ,
84
99
username : socket . username ,
85
100
connected : true ,
86
101
messages : [ ] ,
@@ -90,23 +105,23 @@ io.on("connection", (socket) => {
90
105
socket . on ( "private message" , ( { content, to } ) => {
91
106
const message = {
92
107
content,
93
- from : socket . userID ,
108
+ from : socket . handshake . auth . sessionID ,
94
109
to,
95
110
}
96
- socket . to ( to ) . to ( socket . userID ) . emit ( "private message" , message )
111
+ socket . to ( to ) . to ( socket . handshake . auth . sessionID ) . emit ( "private message" , message )
97
112
messageStore . saveMessage ( message )
98
113
} )
99
114
100
115
// notify users upon disconnection
101
116
socket . on ( "disconnect" , async ( ) => {
102
- const matchingSockets = await io . in ( socket . userID ) . allSockets ( )
117
+ const matchingSockets = await io . in ( socket . handshake . auth . sessionID ) . allSockets ( )
103
118
const isDisconnected = matchingSockets . size === 0
104
119
if ( isDisconnected ) {
105
120
// notify other users
106
- socket . broadcast . emit ( "user disconnected" , socket . userID )
121
+ socket . broadcast . emit ( "user disconnected" , socket . handshake . auth . sessionID )
107
122
// update the connection status of the session
108
- sessionStore . saveSession ( socket . sessionID , {
109
- userID : socket . userID ,
123
+ sessionStore . saveSession ( socket . handshake . auth . sessionID , {
124
+ sessionID : socket . handshake . auth . sessionID ,
110
125
username : socket . username ,
111
126
connected : false ,
112
127
} )
0 commit comments