perubahan
This commit is contained in:
109
internal/services/websocket/message.go
Normal file
109
internal/services/websocket/message.go
Normal file
@@ -0,0 +1,109 @@
|
||||
package websocket
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"github.com/google/uuid"
|
||||
)
|
||||
|
||||
// MessageType mendefinisikan tipe-tipe pesan yang valid
|
||||
type MessageType string
|
||||
|
||||
const (
|
||||
// Pesan koneksi
|
||||
WelcomeMessage MessageType = "welcome"
|
||||
ErrorMessage MessageType = "error"
|
||||
DisconnectMessage MessageType = "disconnect"
|
||||
|
||||
// Pesan kontrol
|
||||
PingMessage MessageType = "ping"
|
||||
PongMessage MessageType = "pong"
|
||||
HeartbeatMessage MessageType = "heartbeat"
|
||||
ConnectionTestMessage MessageType = "connection_test"
|
||||
|
||||
// Pesan informasi
|
||||
ServerInfoMessage MessageType = "server_info"
|
||||
ClientInfoMessage MessageType = "client_info"
|
||||
OnlineUsersMessage MessageType = "online_users"
|
||||
|
||||
// Pesan komunikasi
|
||||
DirectMessage MessageType = "direct_message"
|
||||
RoomMessage MessageType = "room_message"
|
||||
BroadcastMessage MessageType = "broadcast"
|
||||
|
||||
// Pesan database
|
||||
DatabaseQueryMessage MessageType = "database_query"
|
||||
DatabaseChangeMessage MessageType = "database_change"
|
||||
DatabaseInsertMessage MessageType = "db_insert"
|
||||
DatabaseCustomQueryMessage MessageType = "db_custom_query"
|
||||
|
||||
// Pesan monitoring
|
||||
SystemStatusMessage MessageType = "system_status"
|
||||
DataStreamMessage MessageType = "data_stream"
|
||||
|
||||
// Pesan room management
|
||||
JoinRoomMessage MessageType = "join_room"
|
||||
LeaveRoomMessage MessageType = "leave_room"
|
||||
GetRoomInfoMessage MessageType = "get_room_info"
|
||||
|
||||
// Pesan admin
|
||||
AdminKickClientMessage MessageType = "admin_kick_client"
|
||||
AdminKillServerMessage MessageType = "admin_kill_server"
|
||||
GetServerStatsMessage MessageType = "get_server_stats"
|
||||
GetSystemHealthMessage MessageType = "get_system_health"
|
||||
AdminClearLogsMessage MessageType = "admin_clear_logs"
|
||||
|
||||
// Pesan utility
|
||||
GetStatsMessage MessageType = "get_stats"
|
||||
)
|
||||
|
||||
// WebSocketMessage menyimpan struktur pesan WebSocket
|
||||
type WebSocketMessage struct {
|
||||
Type MessageType `json:"type"`
|
||||
Data interface{} `json:"data"`
|
||||
Timestamp time.Time `json:"timestamp"`
|
||||
ClientID string `json:"client_id,omitempty"`
|
||||
MessageID string `json:"message_id,omitempty"`
|
||||
Room string `json:"room,omitempty"`
|
||||
}
|
||||
|
||||
// NewWebSocketMessage membuat pesan WebSocket baru
|
||||
func NewWebSocketMessage(msgType MessageType, data interface{}, clientID, room string) WebSocketMessage {
|
||||
return WebSocketMessage{
|
||||
Type: msgType,
|
||||
Data: data,
|
||||
Timestamp: time.Now(),
|
||||
ClientID: clientID,
|
||||
MessageID: uuid.New().String(),
|
||||
Room: room,
|
||||
}
|
||||
}
|
||||
|
||||
// MessageHandler mendefinisikan interface untuk handler pesan
|
||||
type MessageHandler interface {
|
||||
HandleMessage(client *Client, message WebSocketMessage) error
|
||||
MessageType() MessageType
|
||||
}
|
||||
|
||||
// MessageRegistry menyimpan registry untuk handler pesan
|
||||
type MessageRegistry struct {
|
||||
handlers map[MessageType]MessageHandler
|
||||
}
|
||||
|
||||
// NewMessageRegistry membuat registry pesan baru
|
||||
func NewMessageRegistry() *MessageRegistry {
|
||||
return &MessageRegistry{
|
||||
handlers: make(map[MessageType]MessageHandler),
|
||||
}
|
||||
}
|
||||
|
||||
// RegisterHandler mendaftarkan handler untuk tipe pesan tertentu
|
||||
func (r *MessageRegistry) RegisterHandler(handler MessageHandler) {
|
||||
r.handlers[handler.MessageType()] = handler
|
||||
}
|
||||
|
||||
// GetHandler mendapatkan handler untuk tipe pesan tertentu
|
||||
func (r *MessageRegistry) GetHandler(msgType MessageType) (MessageHandler, bool) {
|
||||
handler, exists := r.handlers[msgType]
|
||||
return handler, exists
|
||||
}
|
||||
Reference in New Issue
Block a user