|
|
class MatchingQueue { |
|
|
constructor() { |
|
|
this.queue = []; |
|
|
} |
|
|
|
|
|
add(socketId, user) { |
|
|
this.queue.push({ socketId, user, joinedAt: Date.now() }); |
|
|
} |
|
|
|
|
|
remove(socketId) { |
|
|
this.queue = this.queue.filter(client => client.socketId !== socketId); |
|
|
} |
|
|
|
|
|
findMatch(currentUser) { |
|
|
|
|
|
const candidates = this.queue.filter(c => c.user._id !== currentUser._id); |
|
|
|
|
|
if (candidates.length === 0) return null; |
|
|
|
|
|
|
|
|
const oppositeGender = candidates.find( |
|
|
c => c.user.profile.gender !== currentUser.profile.gender |
|
|
); |
|
|
|
|
|
if (oppositeGender) return oppositeGender; |
|
|
|
|
|
|
|
|
return candidates[0]; |
|
|
} |
|
|
} |
|
|
|
|
|
export default new MatchingQueue(); |
|
|
|