Skip to content

⚡ Real-Time Events

KitchenAsty uses Socket.IO for real-time communication between the server and connected clients (admin dashboard, kitchen display).

🏗️ Architecture

┌──────────────┐     Socket.IO      ┌──────────────┐
│  Admin/KDS   │ ◄────────────────► │    Server     │
│  (React)     │                    │  (Express)    │
└──────────────┘                    └──────────────┘

                                    Events emitted
                                    on order/status
                                    changes

🏠 Rooms

RoomFormatPurpose
Kitchenkitchen:{locationId}Kitchen display for a location
Orderorder:{orderId}Updates for a specific order

📤 Client → Server Events

EventPayloadDescription
join:kitchen{ locationId: string }Join the kitchen room for a location
join:order{ orderId: string }Subscribe to updates for a specific order

📥 Server → Client Events

EventPayloadDescription
order:createdFull order objectNew order placed at this location
order:updatedFull order objectOrder status or details changed

🖥️ Server-Side Integration

Events are emitted from controllers when orders are created or updated:

typescript
// In order controller, after creating an order
io.to(`kitchen:${order.locationId}`).emit('order:created', order);

// After status update
io.to(`kitchen:${order.locationId}`).emit('order:updated', order);
io.to(`order:${order.id}`).emit('order:updated', order);

⚛️ React Client Integration

typescript
import { io } from 'socket.io-client';

const socket = io('http://localhost:3000');

// Join kitchen room
socket.emit('join:kitchen', { locationId });

// Listen for new orders
socket.on('order:created', (order) => {
  // Add order to the kitchen display
});

// Listen for order updates
socket.on('order:updated', (order) => {
  // Update order status in the UI
});

🤖 Automation Events

Separately from Socket.IO, the server uses Node.js EventEmitter for the automation system. These are internal server events that trigger automation rules:

EventWhen
order.createdNew order placed
order.statusChangedOrder status updated
reservation.createdNew reservation submitted
review.submittedNew review submitted

See Automation for details on creating rules that respond to these events.