MCPcopy Create free account
hub / github.com/astercloud/aster / PushEvent

Method PushEvent

pkg/agent/remote_agent.go:78–133  ·  view source on GitHub ↗

PushEvent 接收远程事件并推送到本地 EventBus 这是 RemoteAgent 的核心方法,用于接收来自远程进程的事件

(envelope types.AgentEventEnvelope)

Source from the content-addressed store, hash-verified

76// PushEvent 接收远程事件并推送到本地 EventBus
77// 这是 RemoteAgent 的核心方法,用于接收来自远程进程的事件
78func (r *RemoteAgent) PushEvent(envelope types.AgentEventEnvelope) error {
79 if envelope.Event == nil {
80 return errors.New("event is nil")
81 }
82
83 // 根据事件类型推送到对应的通道
84 if ev, ok := envelope.Event.(types.EventType); ok {
85 channel := ev.Channel()
86
87 switch channel {
88 case types.ChannelProgress:
89 r.eventBus.EmitProgress(envelope.Event)
90 case types.ChannelControl:
91 r.eventBus.EmitControl(envelope.Event)
92 case types.ChannelMonitor:
93 r.eventBus.EmitMonitor(envelope.Event)
94 default:
95 remoteAgentLog.Warn(context.Background(), "remote_agent.unknown_channel", map[string]any{
96 "agent_id": r.id,
97 "channel": string(channel),
98 })
99 }
100
101 // 更新状态
102 r.updateStateFromEvent(envelope.Event)
103 } else if eventMap, ok := envelope.Event.(map[string]any); ok {
104 // 处理从 JSON 反序列化的事件(map[string]any 类型)
105 // 从事件 map 中推断 channel
106 channel := r.inferChannelFromEventMap(eventMap)
107
108 switch types.AgentChannel(channel) {
109 case types.ChannelProgress:
110 r.eventBus.EmitProgress(envelope.Event)
111 case types.ChannelControl:
112 r.eventBus.EmitControl(envelope.Event)
113 case types.ChannelMonitor:
114 r.eventBus.EmitMonitor(envelope.Event)
115 default:
116 // 默认发送到 Progress 通道
117 r.eventBus.EmitProgress(envelope.Event)
118 }
119
120 remoteAgentLog.Debug(context.Background(), "remote_agent.event_pushed", map[string]any{
121 "agent_id": r.id,
122 "channel": channel,
123 "event": eventMap,
124 })
125 } else {
126 remoteAgentLog.Warn(context.Background(), "remote_agent.unknown_event_type", map[string]any{
127 "agent_id": r.id,
128 "event_type": fmt.Sprintf("%T", envelope.Event),
129 })
130 }
131
132 return nil
133}
134
135// inferChannelFromEventMap 从事件 map 中推断通道类型

Callers 1

handleEventMethod · 0.80

Calls 9

updateStateFromEventMethod · 0.95
AgentChannelTypeAlias · 0.92
EmitProgressMethod · 0.80
EmitControlMethod · 0.80
EmitMonitorMethod · 0.80
ChannelMethod · 0.65
WarnMethod · 0.65
DebugMethod · 0.65

Tested by

no test coverage detected