71 lines
1.9 KiB
Go
71 lines
1.9 KiB
Go
|
|
package di
|
||
|
|
|
||
|
|
import (
|
||
|
|
"cellbot/internal/config"
|
||
|
|
"cellbot/internal/engine"
|
||
|
|
"cellbot/internal/protocol"
|
||
|
|
"cellbot/pkg/net"
|
||
|
|
"go.uber.org/fx"
|
||
|
|
"go.uber.org/zap"
|
||
|
|
)
|
||
|
|
|
||
|
|
// ProvideLogger 提供日志实例
|
||
|
|
func ProvideLogger(cfg *config.Config) (*zap.Logger, error) {
|
||
|
|
return config.InitLogger(&cfg.Log)
|
||
|
|
}
|
||
|
|
|
||
|
|
// ProvideConfig 提供配置实例
|
||
|
|
func ProvideConfig() (*config.Config, error) {
|
||
|
|
configManager := config.NewConfigManager("configs/config.toml", zap.NewNop())
|
||
|
|
if err := configManager.Load(); err != nil {
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
return configManager.Get(), nil
|
||
|
|
}
|
||
|
|
|
||
|
|
// ProvideConfigManager 提供配置管理器
|
||
|
|
func ProvideConfigManager(logger *zap.Logger) (*config.ConfigManager, error) {
|
||
|
|
configManager := config.NewConfigManager("configs/config.toml", logger)
|
||
|
|
if err := configManager.Load(); err != nil {
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
// 启动配置文件监听
|
||
|
|
if err := configManager.Watch(); err != nil {
|
||
|
|
logger.Warn("Failed to watch config file", zap.Error(err))
|
||
|
|
}
|
||
|
|
return configManager, nil
|
||
|
|
}
|
||
|
|
|
||
|
|
// ProvideEventBus 提供事件总线
|
||
|
|
func ProvideEventBus(logger *zap.Logger) *engine.EventBus {
|
||
|
|
return engine.NewEventBus(logger, 10000)
|
||
|
|
}
|
||
|
|
|
||
|
|
// ProvideDispatcher 提供事件分发器
|
||
|
|
func ProvideDispatcher(eventBus *engine.EventBus, logger *zap.Logger) *engine.Dispatcher {
|
||
|
|
return engine.NewDispatcher(eventBus, logger)
|
||
|
|
}
|
||
|
|
|
||
|
|
// ProvideBotManager 提供机器人管理器
|
||
|
|
func ProvideBotManager(logger *zap.Logger) *protocol.BotManager {
|
||
|
|
return protocol.NewBotManager(logger)
|
||
|
|
}
|
||
|
|
|
||
|
|
// ProvideServer 提供HTTP服务器
|
||
|
|
func ProvideServer(cfg *config.Config, logger *zap.Logger, botManager *protocol.BotManager, eventBus *engine.EventBus) *net.Server {
|
||
|
|
return net.NewServer(cfg.Server.Host, cfg.Server.Port, logger, botManager, eventBus)
|
||
|
|
}
|
||
|
|
|
||
|
|
// Providers 依赖注入提供者列表
|
||
|
|
var Providers = fx.Options(
|
||
|
|
fx.Provide(
|
||
|
|
ProvideConfig,
|
||
|
|
ProvideConfigManager,
|
||
|
|
ProvideLogger,
|
||
|
|
ProvideEventBus,
|
||
|
|
ProvideDispatcher,
|
||
|
|
ProvideBotManager,
|
||
|
|
ProvideServer,
|
||
|
|
),
|
||
|
|
)
|