actor_base.go 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. package pomelo
  2. import (
  3. cfacade "github.com/mhaya/facade"
  4. clog "github.com/mhaya/logger"
  5. cactor "github.com/mhaya/net/actor"
  6. cproto "github.com/mhaya/net/proto"
  7. )
  8. const (
  9. ResponseFuncName = "response"
  10. PushFuncName = "push"
  11. KickFuncName = "kick"
  12. BroadcastName = "broadcast"
  13. )
  14. type ActorBase struct {
  15. cactor.Base
  16. }
  17. func (p *ActorBase) Response(session *cproto.Session, v interface{}) {
  18. Response(p, session.AgentPath, session.Sid, session.Mid, v)
  19. }
  20. func (p *ActorBase) ResponseCode(session *cproto.Session, statusCode int32) {
  21. ResponseCode(p, session.AgentPath, session.Sid, session.Mid, statusCode)
  22. }
  23. func (p *ActorBase) Push(session *cproto.Session, route string, v interface{}) {
  24. Push(p, session.AgentPath, session.Sid, route, v)
  25. }
  26. func (p *ActorBase) Kick(session *cproto.Session, reason interface{}, closed bool) {
  27. Kick(p, session.AgentPath, session.Sid, reason, closed)
  28. }
  29. func (p *ActorBase) Broadcast(agentPath string, uidList []int64, allUID bool, route string, v interface{}) {
  30. Broadcast(p, agentPath, uidList, allUID, route, v)
  31. }
  32. func Response(iActor cfacade.IActor, agentPath, sid string, mid uint32, v interface{}) {
  33. data, err := iActor.App().Serializer().Marshal(v)
  34. if err != nil {
  35. clog.Warnf("[Response] Marshal error. v = %+v", v)
  36. return
  37. }
  38. rsp := &cproto.PomeloResponse{
  39. Sid: sid,
  40. Mid: mid,
  41. Data: data,
  42. }
  43. iActor.Call(agentPath, ResponseFuncName, rsp)
  44. }
  45. func ResponseCode(iActor cfacade.IActor, agentPath, sid string, mid uint32, statusCode int32) {
  46. rsp := &cproto.PomeloResponse{
  47. Sid: sid,
  48. Mid: mid,
  49. Code: statusCode,
  50. }
  51. iActor.Call(agentPath, ResponseFuncName, rsp)
  52. }
  53. func Push(iActor cfacade.IActor, agentPath, sid, route string, v interface{}) {
  54. if route == "" {
  55. clog.Warn("[Push] route value error.")
  56. return
  57. }
  58. data, err := iActor.App().Serializer().Marshal(v)
  59. if err != nil {
  60. clog.Warnf("[Push] Marshal error. route =%s, v = %+v", route, v)
  61. return
  62. }
  63. rsp := &cproto.PomeloPush{
  64. Sid: sid,
  65. Route: route,
  66. Data: data,
  67. }
  68. iActor.Call(agentPath, PushFuncName, rsp)
  69. }
  70. func Kick(iActor cfacade.IActor, agentPath, sid string, reason interface{}, closed bool) {
  71. data, err := iActor.App().Serializer().Marshal(reason)
  72. if err != nil {
  73. clog.Warnf("[Kick] Marshal error. reason = %+v", reason)
  74. return
  75. }
  76. rsp := &cproto.PomeloKick{
  77. Sid: sid,
  78. Reason: data,
  79. Close: closed,
  80. }
  81. iActor.Call(agentPath, KickFuncName, rsp)
  82. }
  83. func Broadcast(iActor cfacade.IActor, agentPath string, uidList []int64, allUID bool, route string, v interface{}) {
  84. if !allUID && len(uidList) < 1 {
  85. clog.Warn("[Broadcast] uidList value error.")
  86. return
  87. }
  88. if route == "" {
  89. clog.Warn("[Broadcast] route value error.")
  90. return
  91. }
  92. data, err := iActor.App().Serializer().Marshal(v)
  93. if err != nil {
  94. clog.Warnf("[Kick] Marshal error. v = %+v", v)
  95. return
  96. }
  97. rsp := &cproto.PomeloBroadcastPush{
  98. UidList: uidList,
  99. AllUID: allUID,
  100. Route: route,
  101. Data: data,
  102. }
  103. iActor.Call(agentPath, BroadcastName, rsp)
  104. }