Initial commit
This commit is contained in:
+118
@@ -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
|
||||
}
|
||||
Reference in New Issue
Block a user