| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- package mail
- import (
- "f1-game/internal/event"
- nameActor "f1-game/internal/name/actor"
- nameEvent "f1-game/internal/name/event"
- nameRemote "f1-game/internal/name/remote"
- "f1-game/internal/sessions"
- 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.Mail
- }
- func (p *actor) OnInit() {
- // 预先创建子actor
- for i := range p.workerSize {
- childID := cstring.ToString(i)
- childActor := &actorMail{}
- p.Child().Create(childID, childActor)
- }
- p.Event().Register(nameEvent.Player_Login, p.onLoginEvent)
- }
- func (p *actor) OnLocalReceived(m *cfacade.Message) (next bool, invoke bool) {
- playerID := m.Session.GetInt(sessions.PlayerID)
- childID := cstring.ToString(playerID % p.workerSize)
- if childActor, found := p.Child().Get(childID); found {
- childActor.PostLocal(m)
- }
- return false, false
- }
- func (p *actor) OnFindChild(m *cfacade.Message) (cfacade.IActor, bool) {
- playerID, ok := cstring.ToInt(m.TargetPath().ChildID, 0)
- if playerID < 1 || !ok {
- clog.Warnf("Target child ID error path = %s", m.TargetPath())
- return nil, false
- }
- childID := cstring.ToString(playerID % p.workerSize)
- return p.Child().Get(childID)
- }
- // onLoginEvent 每次登录检查是否有新的邮件模板
- func (p *actor) onLoginEvent(e cfacade.IEventData) {
- evt, ok := e.(*event.PlayerLogin)
- if !ok {
- return
- }
- // 每次登录时,检查邮件模板
- targetPath := p.NewChildPath(nameActor.Mail, evt.UniqueID())
- p.Call(targetPath, nameRemote.Mail_OnLogin, evt)
- }
|