121 lines
2.8 KiB
Markdown
121 lines
2.8 KiB
Markdown
# Duelfi Chat Server
|
|
|
|
A real-time chat server built with Socket.IO and Express, supporting message creation, editing, and deletion.
|
|
|
|
## Server Configuration
|
|
|
|
- **Port**: 3040
|
|
- **CORS Origins**:
|
|
- http://localhost:3000
|
|
- http://localhost:3030
|
|
- http://localhost:3031
|
|
- https://dev.duelfi.io
|
|
- https://beta.duelfi.io
|
|
- https://duelfi.io
|
|
|
|
## Message Structure
|
|
|
|
```typescript
|
|
interface ChatMessage {
|
|
id: string; // Unique message identifier
|
|
user: string; // User identifier (DID format)
|
|
message: string; // Message content
|
|
timestamp: number; // Unix timestamp
|
|
}
|
|
```
|
|
|
|
## Socket Events
|
|
|
|
### Client to Server
|
|
|
|
1. **chat message**
|
|
- Purpose: Send a new message
|
|
- Payload: `ChatMessage` object
|
|
- Response: Broadcasts to all clients
|
|
|
|
2. **edit message**
|
|
- Purpose: Edit an existing message
|
|
- Payload: `{ messageId: string, newMessage: string }`
|
|
- Response: Broadcasts 'message edited' on success
|
|
|
|
3. **delete message**
|
|
- Purpose: Delete a message
|
|
- Payload: `messageId: string`
|
|
- Response: Broadcasts 'message deleted' on success
|
|
|
|
### Server to Client
|
|
|
|
1. **recent messages**
|
|
- Purpose: Initial message history
|
|
- Payload: `ChatMessage[]`
|
|
- Trigger: On connection
|
|
|
|
2. **chat message**
|
|
- Purpose: New message notification
|
|
- Payload: `ChatMessage` object
|
|
- Trigger: When any client sends a message
|
|
|
|
3. **message edited**
|
|
- Purpose: Message edit notification
|
|
- Payload: `{ messageId: string, newMessage: string }`
|
|
- Trigger: When a message is successfully edited
|
|
|
|
4. **message deleted**
|
|
- Purpose: Message deletion notification
|
|
- Payload: `messageId: string`
|
|
- Trigger: When a message is successfully deleted
|
|
|
|
## Message Storage
|
|
|
|
- Messages are stored in `chat_history.json`
|
|
- Maximum of 100 messages are kept in memory
|
|
- File storage maintains message history
|
|
- All operations (create/edit/delete) are persisted to file
|
|
|
|
## Error Handling
|
|
|
|
- File operations are wrapped in try-catch blocks
|
|
- Failed operations return false
|
|
- Successful operations return true
|
|
- All errors are logged to console
|
|
|
|
## Usage Example
|
|
|
|
```typescript
|
|
// Connect to server
|
|
const socket = io('http://localhost:3040');
|
|
|
|
// Send message
|
|
socket.emit('chat message', {
|
|
id: Date.now().toString(),
|
|
user: 'did:privy:user123',
|
|
message: 'Hello world',
|
|
timestamp: Date.now()
|
|
});
|
|
|
|
// Edit message
|
|
socket.emit('edit message', {
|
|
messageId: 'message-id-here',
|
|
newMessage: 'Updated message'
|
|
});
|
|
|
|
// Delete message
|
|
socket.emit('delete message', 'message-id-here');
|
|
|
|
// Listen for events
|
|
socket.on('recent messages', (messages) => {
|
|
// Handle initial messages
|
|
});
|
|
|
|
socket.on('chat message', (message) => {
|
|
// Handle new message
|
|
});
|
|
|
|
socket.on('message edited', ({ messageId, newMessage }) => {
|
|
// Handle edited message
|
|
});
|
|
|
|
socket.on('message deleted', (messageId) => {
|
|
// Handle deleted message
|
|
});
|
|
``` |