actor.go 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. package login
  2. import (
  3. nameActor "f1-game/internal/name/actor"
  4. cstring "github.com/cherry-game/cherry/extend/string"
  5. cfacade "github.com/cherry-game/cherry/facade"
  6. clog "github.com/cherry-game/cherry/logger"
  7. cactor "github.com/cherry-game/cherry/net/actor"
  8. )
  9. type actor struct {
  10. cactor.Base
  11. workerSize int
  12. }
  13. func NewActor(workerSize int) *actor {
  14. if workerSize < 1 {
  15. workerSize = 1
  16. }
  17. return &actor{
  18. workerSize: workerSize,
  19. }
  20. }
  21. func (p *actor) AliasID() string {
  22. return nameActor.Login
  23. }
  24. func (p *actor) OnInit() {
  25. // 预先创建子actor
  26. for i := range p.workerSize {
  27. childID := cstring.ToString(i)
  28. childActor := &actorLogin{}
  29. p.Child().Create(childID, childActor)
  30. }
  31. }
  32. func (p *actor) OnStop() {
  33. }
  34. // OnLocalReceived 拦截local消息,转发到子Actor
  35. func (p *actor) OnLocalReceived(m *cfacade.Message) (next bool, invoke bool) {
  36. if m.Session.Uid < 1 {
  37. clog.Warnf("Session uid error. m = %+v", m)
  38. return false, false
  39. }
  40. // 根据uid取模获取actorLogin进行登录处理
  41. childID := cstring.ToString(int(m.Session.Uid) % p.workerSize)
  42. if child, found := p.Child().Get(childID); found {
  43. child.PostLocal(m)
  44. }
  45. return false, false
  46. }