feat: 初始化多机器人服务端项目框架

基于Go语言构建多机器人服务端框架,包含配置管理、事件总线、依赖注入等核心模块
添加项目基础结构、README、gitignore和初始代码实现
This commit is contained in:
2026-01-04 21:19:17 +08:00
commit ac0dfb64c9
22 changed files with 2385 additions and 0 deletions

11
internal/di/app.go Normal file
View File

@@ -0,0 +1,11 @@
package di
import "go.uber.org/fx"
// NewApp 创建应用实例
func NewApp() *fx.App {
return fx.New(
Providers,
Lifecycle,
)
}

77
internal/di/lifecycle.go Normal file
View File

@@ -0,0 +1,77 @@
package di
import (
"context"
"cellbot/internal/engine"
"cellbot/internal/protocol"
"cellbot/pkg/net"
"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,
) fx.Option {
return fx.Invoke(
func(lc fx.Lifecycle) {
lc.Append(fx.Hook{
OnStart: func(ctx context.Context) error {
logger.Info("Starting CellBot application...")
// 启动事件总线
eventBus.Start()
// 启动分发器
dispatcher.Start(ctx)
// 启动所有机器人
if err := botManager.StartAll(ctx); err != nil {
logger.Error("Failed to start bots", zap.Error(err))
}
// 启动HTTP服务器
if err := server.Start(); err != nil {
logger.Error("Failed to start server", zap.Error(err))
return err
}
logger.Info("CellBot application started successfully")
return nil
},
OnStop: func(ctx context.Context) error {
logger.Info("Stopping CellBot application...")
// 停止HTTP服务器
if err := server.Stop(); err != nil {
logger.Error("Failed to stop server", zap.Error(err))
}
// 停止所有机器人
if err := botManager.StopAll(ctx); err != nil {
logger.Error("Failed to stop bots", zap.Error(err))
}
// 停止分发器
dispatcher.Stop()
// 停止事件总线
eventBus.Stop()
logger.Info("CellBot application stopped successfully")
return nil
},
})
},
)
}
// Lifecycle 生命周期管理选项
var Lifecycle = fx.Options(
fx.Invoke(RegisterLifecycleHooks),
)

70
internal/di/providers.go Normal file
View File

@@ -0,0 +1,70 @@
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,
),
)