func (self *AccessHandler) Process(ctx *DefaultPipelineContext, event IEvent) error { // log.Debug("accessEvent|Process|%s|%t\n", self.GetName(), event) aevent, ok := self.cast(event) if !ok { return ERROR_INVALID_EVENT_TYPE } //做权限校验............. if false { log.Warn("accessEvent|Process|INVALID AUTH|%s|%s\n", aevent.groupId, aevent.secretKey) } // 权限验证通过 保存到clientmanager self.clientManager.Auth(client.NewGroupAuth(aevent.groupId, aevent.secretKey), aevent.remoteClient) // log.Info("accessEvent|Process|NEW CONNECTION|AUTH SUCC|%s|%s|%s\n", aevent.groupId, aevent.secretKey, aevent.remoteClient.RemoteAddr()) cmd := protocol.MarshalConnAuthAck(true, "授权成功") //响应包 packet := packet.NewRespPacket(aevent.opaque, protocol.CMD_CONN_AUTH, cmd) //向当前连接写入当前包 remoteEvent := NewRemotingEvent(packet, []string{aevent.remoteClient.RemoteAddr()}) //向后走网络传输 ctx.SendForward(remoteEvent) return nil }
func NewKiteClientManager(zkAddr, groupId, secretKey string, listen listener.IListener) *KiteClientManager { flowstat := stat.NewFlowStat("kiteclient-" + groupId) rc := turbo.NewRemotingConfig( "remoting-"+groupId, 50, 16*1024, 16*1024, 10000, 10000, 10*time.Second, 160000) //重连管理器 reconnManager := c.NewReconnectManager(true, 30*time.Second, 100, handshake) //构造pipeline的结构 pipeline := pipe.NewDefaultPipeline() clientm := c.NewClientManager(reconnManager) pipeline.RegisteHandler("kiteclient-packet", chandler.NewPacketHandler("kiteclient-packet")) pipeline.RegisteHandler("kiteclient-heartbeat", chandler.NewHeartbeatHandler("kiteclient-heartbeat", 10*time.Second, 5*time.Second, clientm)) pipeline.RegisteHandler("kiteclient-accept", chandler.NewAcceptHandler("kiteclient-accept", listen)) pipeline.RegisteHandler("kiteclient-remoting", pipe.NewRemotingHandler("kiteclient-remoting", clientm)) manager := &KiteClientManager{ ga: c.NewGroupAuth(groupId, secretKey), kiteClients: make(map[string][]*kiteClient, 10), topics: make([]string, 0, 10), pipeline: pipeline, clientManager: clientm, rc: rc, flowstat: flowstat, zkAddr: zkAddr} //开启流量统计 manager.remointflow() manager.flowstat.Start() return manager }