2026-01-04 21:19:17 +08:00
|
|
|
package di
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"context"
|
|
|
|
|
|
|
|
|
|
"cellbot/internal/engine"
|
|
|
|
|
"cellbot/internal/protocol"
|
|
|
|
|
"cellbot/pkg/net"
|
2026-01-05 00:40:09 +08:00
|
|
|
|
2026-01-04 21:19:17 +08:00
|
|
|
"go.uber.org/fx"
|
|
|
|
|
"go.uber.org/zap"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
// RegisterLifecycleHooks 注册应用生命周期钩子
|
|
|
|
|
func RegisterLifecycleHooks(
|
|
|
|
|
logger *zap.Logger,
|
|
|
|
|
eventBus *engine.EventBus,
|
|
|
|
|
dispatcher *engine.Dispatcher,
|
|
|
|
|
botManager *protocol.BotManager,
|
|
|
|
|
server *net.Server,
|
2026-01-05 00:40:09 +08:00
|
|
|
lc fx.Lifecycle,
|
|
|
|
|
) {
|
|
|
|
|
lc.Append(fx.Hook{
|
|
|
|
|
OnStart: func(ctx context.Context) error {
|
|
|
|
|
logger.Info("=== Starting CellBot application ===")
|
2026-01-04 21:19:17 +08:00
|
|
|
|
2026-01-05 00:40:09 +08:00
|
|
|
// 启动事件总线
|
|
|
|
|
logger.Info("Starting event bus...")
|
|
|
|
|
eventBus.Start()
|
|
|
|
|
logger.Info("Event bus started")
|
2026-01-04 21:19:17 +08:00
|
|
|
|
2026-01-05 00:40:09 +08:00
|
|
|
// 启动分发器
|
|
|
|
|
logger.Info("Starting dispatcher...")
|
|
|
|
|
dispatcher.Start(ctx)
|
|
|
|
|
logger.Info("Dispatcher started")
|
2026-01-04 21:19:17 +08:00
|
|
|
|
2026-01-05 00:40:09 +08:00
|
|
|
// 启动所有机器人
|
|
|
|
|
if err := botManager.StartAll(ctx); err != nil {
|
|
|
|
|
logger.Error("Failed to start bots", zap.Error(err))
|
|
|
|
|
}
|
2026-01-04 21:19:17 +08:00
|
|
|
|
2026-01-05 00:40:09 +08:00
|
|
|
// 启动HTTP服务器
|
|
|
|
|
if err := server.Start(); err != nil {
|
|
|
|
|
logger.Error("Failed to start server", zap.Error(err))
|
|
|
|
|
return err
|
|
|
|
|
}
|
2026-01-04 21:19:17 +08:00
|
|
|
|
2026-01-05 00:40:09 +08:00
|
|
|
logger.Info("CellBot application started successfully")
|
|
|
|
|
return nil
|
|
|
|
|
},
|
|
|
|
|
OnStop: func(ctx context.Context) error {
|
|
|
|
|
logger.Info("Stopping CellBot application...")
|
2026-01-04 21:19:17 +08:00
|
|
|
|
2026-01-05 00:40:09 +08:00
|
|
|
// 停止HTTP服务器
|
|
|
|
|
if err := server.Stop(); err != nil {
|
|
|
|
|
logger.Error("Failed to stop server", zap.Error(err))
|
|
|
|
|
}
|
2026-01-04 21:19:17 +08:00
|
|
|
|
2026-01-05 00:40:09 +08:00
|
|
|
// 停止所有机器人
|
|
|
|
|
if err := botManager.StopAll(ctx); err != nil {
|
|
|
|
|
logger.Error("Failed to stop bots", zap.Error(err))
|
|
|
|
|
}
|
2026-01-04 21:19:17 +08:00
|
|
|
|
2026-01-05 00:40:09 +08:00
|
|
|
// 停止分发器
|
|
|
|
|
dispatcher.Stop()
|
2026-01-04 21:19:17 +08:00
|
|
|
|
2026-01-05 00:40:09 +08:00
|
|
|
// 停止事件总线
|
|
|
|
|
eventBus.Stop()
|
2026-01-04 21:19:17 +08:00
|
|
|
|
2026-01-05 00:40:09 +08:00
|
|
|
logger.Info("CellBot application stopped successfully")
|
|
|
|
|
return nil
|
2026-01-04 21:19:17 +08:00
|
|
|
},
|
2026-01-05 00:40:09 +08:00
|
|
|
})
|
2026-01-04 21:19:17 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Lifecycle 生命周期管理选项
|
|
|
|
|
var Lifecycle = fx.Options(
|
|
|
|
|
fx.Invoke(RegisterLifecycleHooks),
|
|
|
|
|
)
|