Initial commit

This commit is contained in:
2026-06-30 15:14:37 +08:00
commit 15dab96872
311 changed files with 95639 additions and 0 deletions
+118
View File
@@ -0,0 +1,118 @@
package core
import (
"fmt"
"sync"
"go.uber.org/zap"
)
// Core 进程入口 - 管理多个 Engine 实例
type Core struct {
engines map[string]*Engine // engineID -> Engine
mu sync.RWMutex
logger *zap.Logger
}
// NewCore 创建 Core 实例(进程入口)
func NewCore(logger *zap.Logger) *Core {
return &Core{
engines: make(map[string]*Engine),
logger: logger,
}
}
// CreateEngine 创建 Engine 实例
func (c *Core) CreateEngine(engineID string, metrics *Metrics) (*Engine, error) {
c.mu.Lock()
defer c.mu.Unlock()
// 检查是否已存在
if _, ok := c.engines[engineID]; ok {
return nil, fmt.Errorf("engine %s already exists", engineID)
}
// 创建新 Engine
engine := NewEngine(c.logger, metrics)
c.engines[engineID] = engine
c.logger.Info("创建 Engine 实例",
zap.String("engine_id", engineID))
return engine, nil
}
// GetEngine 获取 Engine 实例
func (c *Core) GetEngine(engineID string) (*Engine, error) {
c.mu.RLock()
defer c.mu.RUnlock()
engine, ok := c.engines[engineID]
if !ok {
return nil, fmt.Errorf("engine %s not found", engineID)
}
return engine, nil
}
// RemoveEngine 移除 Engine 实例
func (c *Core) RemoveEngine(engineID string) error {
c.mu.Lock()
defer c.mu.Unlock()
engine, ok := c.engines[engineID]
if !ok {
return fmt.Errorf("engine %s not found", engineID)
}
// 停止 Engine
if err := engine.Stop(); err != nil {
c.logger.Warn("停止 Engine 失败",
zap.String("engine_id", engineID),
zap.Error(err))
}
delete(c.engines, engineID)
c.logger.Info("移除 Engine 实例",
zap.String("engine_id", engineID))
return nil
}
// ListEngines 列出所有 Engine ID
func (c *Core) ListEngines() []string {
c.mu.RLock()
defer c.mu.RUnlock()
ids := make([]string, 0, len(c.engines))
for id := range c.engines {
ids = append(ids, id)
}
return ids
}
// Count 获取 Engine 数量
func (c *Core) Count() int {
c.mu.RLock()
defer c.mu.RUnlock()
return len(c.engines)
}
// Close 关闭所有 Engine
func (c *Core) Close() error {
c.mu.Lock()
defer c.mu.Unlock()
for id, engine := range c.engines {
if err := engine.Stop(); err != nil {
c.logger.Warn("停止 Engine 失败",
zap.String("engine_id", id),
zap.Error(err))
}
}
c.engines = make(map[string]*Engine)
c.logger.Info("关闭所有 Engine")
return nil
}