Add Redis persistence.

This commit is contained in:
Jonathan Harker 2016-02-06 17:10:25 +13:00
parent 74b370f19b
commit a74f848c5a

View file

@ -18,18 +18,25 @@ Then get the apt key, and install the things:
import vibe.d; import vibe.d;
final class Room { final class Room {
string[] messages; RedisDatabase db;
string room;
RedisList!string messages;
ManualEvent messageEvent; ManualEvent messageEvent;
this() { this(RedisDatabase db, string room) {
this.db = db;
this.room = room;
this.messages = db.getAsList!string("webchat_" ~ room);
messageEvent = createManualEvent(); messageEvent = createManualEvent();
} }
void addMessage(string nick, string message) { void addMessage(string nick, string message) {
messages ~= nick ~ ": " ~ message; messages.insertBack(nick ~ ": " ~ message);
messageEvent.emit();
//messages ~= nick ~ ": " ~ message;
} }
void waitForMessage(size_t next_message) { void waitForMessage(long next_message) {
while (messages.length <= next_message) { while (messages.length <= next_message) {
messageEvent.wait(); messageEvent.wait();
} }
@ -37,7 +44,14 @@ final class Room {
} }
final class WebChat { final class WebChat {
private Room[string] rooms; private {
Room[string] rooms;
RedisDatabase db;
}
this() {
db = connectRedis("127.0.0.1").getDatabase(0);
}
// Uses vibe.d magic method names - in this case, GET / // Uses vibe.d magic method names - in this case, GET /
void get() { void get() {
@ -87,7 +101,7 @@ final class WebChat {
private Room getOrCreateRoom(string room) { private Room getOrCreateRoom(string room) {
if (auto pr = room in rooms) return *pr; if (auto pr = room in rooms) return *pr;
return rooms[room] = new Room; return rooms[room] = new Room(db, room);
} }
} }