MCPcopy
hub / github.com/davyxu/cellnet / relay_agent

Function relay_agent

tests/relay_test.go:50–116  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

48}
49
50func relay_agent() {
51
52 var backendSession cellnet.Session
53
54 var wg sync.WaitGroup
55 wg.Add(1)
56 // 后端侦听
57 relay_BackendToAgentAcceptor = peer.NewGenericPeer("tcp.Acceptor", "backend->agent", relayBackendToAgent_Address, nil)
58 backendToAgentDispatcher := proc.NewMessageDispatcherBindPeer(relay_BackendToAgentAcceptor, "tcp.ltv")
59 backendToAgentDispatcher.RegisterMessage("cellnet.SessionAccepted", func(ev cellnet.Event) {
60
61 backendSession = ev.Session()
62
63 log.Debugln("Backend registered", backendSession.ID())
64
65 wg.Done()
66
67 })
68
69 relay_BackendToAgentAcceptor.Start()
70
71 // 前端侦听
72 relay_ClientToAgentAcceptor = peer.NewGenericPeer("tcp.Acceptor", "client->agent", relayClientToAgent_Address, nil)
73 ClientToAgentDispatcher := proc.NewMessageDispatcherBindPeer(relay_ClientToAgentAcceptor, "tcp.ltv")
74 ClientToAgentDispatcher.RegisterMessage("tests.TestEchoACK", func(ev cellnet.Event) {
75
76 // 等待后台会话连接后,再转发消息给后台,本Test专用
77 wg.Wait()
78
79 // 只有在后端服务器连接时
80 if backendSession != nil {
81
82 // 添加掩码的sesid
83 maskedSessionID := ev.Session().ID() + AgentSessionIDMask
84
85 log.Debugln("Relay to backend", ev.Message(), ev.Session().ID())
86 // 路由到后台
87 relay.Relay(backendSession, ev.Message(), maskedSessionID)
88 } else {
89 panic("backendSession is not ready")
90 }
91
92 })
93
94 relay_ClientToAgentAcceptor.Start()
95
96 relay.SetBroadcaster(func(event *relay.RecvMsgEvent) {
97
98 // 仅限于从后端来的Relay消息, 本Test中,因为3个进程逻辑混在一起,必须这样区分来源
99 if event.Ses.Peer() == relay_BackendToAgentAcceptor {
100
101 // 广播器
102 sesAccessor := relay_ClientToAgentAcceptor.(cellnet.SessionAccessor)
103
104 // 去掉掩码
105 sesID := event.PassThroughAsInt64() - AgentSessionIDMask
106 ses := sesAccessor.GetSession(sesID)
107 if ses != nil {

Callers 1

TestRelayFunction · 0.85

Calls 15

IDMethod · 0.95
NewGenericPeerFunction · 0.92
RelayFunction · 0.92
SetBroadcasterFunction · 0.92
RegisterMessageMethod · 0.80
DoneMethod · 0.80
PassThroughAsInt64Method · 0.80
AddMethod · 0.65
SessionMethod · 0.65
StartMethod · 0.65
WaitMethod · 0.65

Tested by

no test coverage detected