fix: rebuild MES as compilable go-zero+ent backend (renamed bj_power_mes), restore 3 workstation projects from pristine original, align naming; all Go projects go build clean
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
package sse
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"log/slog"
|
||||
|
||||
"bj_power_mes/internal/eventbus"
|
||||
"bj_power_mes/internal/eventlog"
|
||||
)
|
||||
|
||||
// EventBridge 将 EventBus 事件转发给 SSE 客户端,实现内部事件到前端的实时推送。
|
||||
type EventBridge struct {
|
||||
sseHandler *Handler
|
||||
bus eventbus.Bus
|
||||
sub eventbus.Subscription
|
||||
}
|
||||
|
||||
// NewEventBridge 创建桥接器并订阅所有 EventBus 事件。
|
||||
func NewEventBridge(bus eventbus.Bus, sseHandler *Handler) *EventBridge {
|
||||
bridge := &EventBridge{
|
||||
sseHandler: sseHandler,
|
||||
bus: bus,
|
||||
}
|
||||
bridge.sub = bus.SubscribeAll(bridge.onEvent)
|
||||
return bridge
|
||||
}
|
||||
|
||||
// Close 取消事件订阅。
|
||||
func (b *EventBridge) Close() {
|
||||
if b.sub != nil {
|
||||
b.sub.Unsubscribe()
|
||||
}
|
||||
}
|
||||
|
||||
func (b *EventBridge) onEvent(_ context.Context, event eventbus.Event) error {
|
||||
data, err := json.Marshal(map[string]any{
|
||||
"id": event.ID,
|
||||
"eventType": string(event.Type),
|
||||
"sourceId": event.Source,
|
||||
"entityType": event.EntityType,
|
||||
"entityId": event.EntityID,
|
||||
"entityVersion": event.EntityVersion,
|
||||
"description": eventlog.EventDescription(event),
|
||||
"payload": event.Payload,
|
||||
"createdAt": event.Timestamp.Format("2006-01-02 15:04:05"),
|
||||
})
|
||||
if err != nil {
|
||||
slog.Error("eventbridge: marshal failed", "err", err)
|
||||
return nil
|
||||
}
|
||||
b.sseHandler.Emit("eventbus."+string(event.Type), string(data))
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user