Feature: Machine Management & State Sync
Tính năng này đảm bảo trạng thái của các máy gắp gấu vật lý luôn được đồng bộ chính xác với hệ thống Backend và ứng dụng người dùng.
1. Luồng đồng bộ trạng thái
Trạng thái máy được đồng bộ qua hai kênh chính: 1. Redis: Lưu trữ trạng thái "nóng" (online/offline, busy/available) để truy xuất tức thời. 2. JMS (ActiveMQ): Gửi các sự kiện thay đổi trạng thái quan trọng về Backend để lưu trữ database và xử lý nghiệp vụ lâu dài.
2. Thành phần xử lý
- RedisMachineRepository: Sử dụng thư viện Jedis để tương tác với Redis.
- Cập nhật thông tin IP, Port, và thời gian heartbeat cuối cùng của máy.
- Giúp Backend (rmc-server) biết được máy nào đang thuộc quyền quản lý của ControlServer nào.
- SendHealthCheck: Gửi các báo cáo về tình trạng sức khỏe của máy (cảm biến, lỗi phần cứng) về Backend.
- SendGamePlay: Gửi kết quả của mỗi phiên chơi (thắng/thua, quà tặng đã gắp được) để Backend thực hiện trừ tiền/cộng quà.
3. Cơ chế Dynamic JMS Listening
DynamicJmsListenerService cho phép ControlServer lắng nghe các lệnh điều khiển từ Backend dành riêng cho từng máy:
- Khi một máy kết nối, ControlServer sẽ đăng ký một consumer trên một queue hoặc topic tương ứng.
- Khi máy ngắt kết nối, consumer này sẽ được thu hồi để tiết kiệm tài nguyên.
4. Các trạng thái máy tiêu biểu
- ONLINE: Máy đã kết nối socket thành công và gửi heartbeat.
- GAMING: Máy đang trong phiên chơi (người dùng đang điều khiển).
- FAULT: Máy gặp lỗi phần cứng (báo cáo qua
ErrorReport). - OFFLINE: Socket bị đóng hoặc vượt quá thời gian timeout của heartbeat.