package login import ( nameActor "f1-game/internal/name/actor" cstring "github.com/cherry-game/cherry/extend/string" cfacade "github.com/cherry-game/cherry/facade" clog "github.com/cherry-game/cherry/logger" cactor "github.com/cherry-game/cherry/net/actor" ) type actor struct { cactor.Base workerSize int } func NewActor(workerSize int) *actor { if workerSize < 1 { workerSize = 1 } return &actor{ workerSize: workerSize, } } func (p *actor) AliasID() string { return nameActor.Login } func (p *actor) OnInit() { // 预先创建子actor for i := range p.workerSize { childID := cstring.ToString(i) childActor := &actorLogin{} p.Child().Create(childID, childActor) } } func (p *actor) OnStop() { } // OnLocalReceived 拦截local消息,转发到子Actor func (p *actor) OnLocalReceived(m *cfacade.Message) (next bool, invoke bool) { if m.Session.Uid < 1 { clog.Warnf("Session uid error. m = %+v", m) return false, false } // 根据uid取模获取actorLogin进行登录处理 childID := cstring.ToString(int(m.Session.Uid) % p.workerSize) if child, found := p.Child().Get(childID); found { child.PostLocal(m) } return false, false }