Skip to content

Commit 8749139

Browse files
cyclotrucatyrode
andauthored
Multiplayer v1 (#97)
This is a comprehensive rewrite of pad.ws that allows real-time collaborative whiteboard experience see #97 for more info Co-authored-by: Alex TYRODE <[email protected]>
1 parent 3195975 commit 8749139

File tree

108 files changed

+6344
-5463
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

108 files changed

+6344
-5463
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,4 @@ src/excalidraw
66
.env
77
src/frontend/.env.local
88
.vscode/settings.json
9+
dev/

docs/context.md

Lines changed: 0 additions & 172 deletions
This file was deleted.

docs/frontend-backend-communication.md

Lines changed: 0 additions & 137 deletions
This file was deleted.

src/backend/cache/__init__.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
from .redis_client import RedisClient
2+
3+
__all__ = ["RedisClient"]

src/backend/cache/redis_client.py

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import os
2+
from redis import asyncio as aioredis
3+
from dotenv import load_dotenv
4+
5+
# Load environment variables
6+
load_dotenv()
7+
8+
# Redis Configuration
9+
REDIS_HOST = os.getenv('REDIS_HOST', 'localhost')
10+
REDIS_PASSWORD = os.getenv('REDIS_PASSWORD', None)
11+
REDIS_PORT = int(os.getenv('REDIS_PORT', 6379))
12+
REDIS_URL = f"redis://{REDIS_HOST}:{REDIS_PORT}"
13+
14+
class RedisClient:
15+
"""Service for managing Redis connections with proper lifecycle management."""
16+
17+
_instance = None
18+
19+
@classmethod
20+
async def get_instance(cls) -> aioredis.Redis:
21+
"""Get or create a Redis client instance."""
22+
if cls._instance is None:
23+
cls._instance = cls()
24+
await cls._instance.initialize()
25+
return cls._instance.client
26+
27+
def __init__(self):
28+
self.client = None
29+
30+
async def initialize(self) -> None:
31+
"""Initialize the Redis client."""
32+
self.client = aioredis.from_url(
33+
REDIS_URL,
34+
password=REDIS_PASSWORD,
35+
decode_responses=True,
36+
health_check_interval=30
37+
)
38+
39+
async def close(self) -> None:
40+
"""Close the Redis client connection."""
41+
if self.client:
42+
await self.client.close()
43+
self.client = None
44+
print("Redis client closed.")

0 commit comments

Comments
 (0)