mirror of
https://github.com/socketio/socket.io.git
synced 2026-04-30 03:00:39 -04:00
55 lines
1.2 KiB
JavaScript
55 lines
1.2 KiB
JavaScript
/* abstract */ class MessageStore {
|
|
saveMessage(message) {}
|
|
findMessagesForUser(userID) {}
|
|
}
|
|
|
|
class InMemoryMessageStore extends MessageStore {
|
|
constructor() {
|
|
super();
|
|
this.messages = [];
|
|
}
|
|
|
|
saveMessage(message) {
|
|
this.messages.push(message);
|
|
}
|
|
|
|
findMessagesForUser(userID) {
|
|
return this.messages.filter(
|
|
({ from, to }) => from === userID || to === userID
|
|
);
|
|
}
|
|
}
|
|
|
|
const CONVERSATION_TTL = 24 * 60 * 60;
|
|
|
|
class RedisMessageStore extends MessageStore {
|
|
constructor(redisClient) {
|
|
super();
|
|
this.redisClient = redisClient;
|
|
}
|
|
|
|
saveMessage(message) {
|
|
const value = JSON.stringify(message);
|
|
this.redisClient
|
|
.multi()
|
|
.rpush(`messages:${message.from}`, value)
|
|
.rpush(`messages:${message.to}`, value)
|
|
.expire(`messages:${message.from}`, CONVERSATION_TTL)
|
|
.expire(`messages:${message.to}`, CONVERSATION_TTL)
|
|
.exec();
|
|
}
|
|
|
|
findMessagesForUser(userID) {
|
|
return this.redisClient
|
|
.lrange(`messages:${userID}`, 0, -1)
|
|
.then((results) => {
|
|
return results.map((result) => JSON.parse(result));
|
|
});
|
|
}
|
|
}
|
|
|
|
module.exports = {
|
|
InMemoryMessageStore,
|
|
RedisMessageStore,
|
|
};
|