context.go 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. package ruleEngine
  2. import (
  3. "sparrow/pkg/actor"
  4. "time"
  5. )
  6. type Context interface {
  7. // 向所有基于success类型的关系节点发消息
  8. TellSuccess(msg *Message)
  9. // 基于某个关系发消息
  10. TellNext(msg *Message, relationType RelationType)
  11. // 向当前节点发消息,duration 为延迟时间
  12. TellSelf(msg *Message, duration time.Duration)
  13. // 发送错误消息消息
  14. TellError(msg *Message, err error)
  15. }
  16. // DefaultContext 默认的上下文
  17. type DefaultContext struct {
  18. nodeCtx *RuleNodeCtx
  19. }
  20. func New(nodeCtx *RuleNodeCtx) *DefaultContext {
  21. return &DefaultContext{nodeCtx: nodeCtx}
  22. }
  23. func (d *DefaultContext) TellSuccess(msg *Message) {
  24. d.tellNext(msg, []RelationType{Success}, nil)
  25. }
  26. func (d *DefaultContext) TellNext(msg *Message, relationType RelationType) {
  27. d.tellNext(msg, []RelationType{relationType}, nil)
  28. }
  29. func (d *DefaultContext) tellNext(msg *Message, relationTypes []RelationType, err error) {
  30. if d.nodeCtx.self.IsDebug {
  31. // TODO: 输出调试日志
  32. }
  33. msg.GetCallBack().onProcessingEnd(d.nodeCtx.self.RuleNodeId)
  34. d.nodeCtx.chainActor.Tell(
  35. &actor.RuleNodeToRuleChanTellNextMsg{
  36. RuleNodeId: d.nodeCtx.self.RuleNodeId,
  37. RelationTypes: relationTypes,
  38. Message: msg,
  39. FailureMessage: err,
  40. })
  41. }
  42. func (d *DefaultContext) TellSelf(msg *Message, duration time.Duration) {
  43. if duration > 0 {
  44. time.AfterFunc(duration, func() {
  45. d.nodeCtx.selfActor.Tell(&actor.RuleToSelfMsg{Message: msg})
  46. })
  47. }
  48. }
  49. func (d *DefaultContext) TellError(msg *Message, err error) {
  50. if d.nodeCtx.self.IsDebug {
  51. // TODO: 处理调试
  52. }
  53. d.nodeCtx.chainActor.Tell(&actor.RuleNodeToRuleChanTellNextMsg{
  54. RuleNodeId: d.nodeCtx.self.RuleNodeId,
  55. RelationTypes: []RelationType{Failure},
  56. Message: msg,
  57. FailureMessage: err,
  58. })
  59. }