package main import ( "git.wanbits.io/joe/franklin/mod" pb "git.wanbits.io/joe/franklin/protos" "git.wanbits.io/joe/kettle/log" "git.wanbits.io/joe/nnet" "github.com/go-redis/redis" "github.com/mitchellh/mapstructure" "go.uber.org/zap" ) type fnRabbitCallback func(session nnet.ISession, packet *RespPacket) var ( rabbit_route_table = map[string]fnRabbitCallback{ CMD_HEARTBEAT: on_bl_heartbeat, CMD_LOGIN_VERIFY: on_bl_login_verify, CMD_UPDATE_USERINFO: on_bl_update_userinfo, } ) func on_recv_timeout(cses nnet.ISession, pkt *ReqPacket) { switch pkt.Cmd { case CMD_LOGIN_VERIFY: response_c_login(cses, pb.ErrCode_TIMEOUT, nil) case CMD_UPDATE_USERINFO: log.Error("udpate userinfo timeout", zap.Any("param", pkt)) } } func on_bl_heartbeat(ses nnet.ISession, pkt *RespPacket) { log.Debug("received bl_heartbeat from rabbit server") } func on_bl_login_verify(ses nnet.ISession, pkt *RespPacket) { iwp, ok := g_rabbitProto.Get(pkt.Seq) if !ok { return // timeout } wp, ok := iwp.(*WaitParam) if !ok { log.Error("interface transform failed") return } if !wp.timer.Stop() { return // timeout } resp := &pb.VerifyResult{} err := mapstructure.Decode(pkt.Result, resp) if err != nil { response_c_login(wp.ses, pb.ErrCode_UNKNOWN, nil) log.Error("bad format", zap.Error(err)) return } var s_login *pb.S_Login user, err := setget_user(resp) if err != nil { s_login = &pb.S_Login{ UserId: resp.UserId, Username: resp.Username, Nickname: resp.Nickname, } } else { s_login = &pb.S_Login{ UserId: user.UserId, Username: user.Username, Nickname: user.Nickname, } if user.Status != int32(pb.UserStatus_NORMAL) { response_c_login(wp.ses, pb.ErrCode_FORBIDDEN, nil) return } // check kick-off } response_c_login(wp.ses, pb.ErrCode_OK, s_login) } func setget_user(res *pb.VerifyResult) (*pb.User, error) { user, err := mod.LoadUser(res.UserId) if err != nil { if err == redis.Nil { user = &pb.User{ UserId: res.UserId, Username: res.Username, Nickname: res.Nickname, HeaderIcon: res.HeaderIcon, Publish: res.Publish, Platform: res.Platform, } fields, err := mod.StructToMap(user) if err != nil { log.Error("", zap.Error(err)) return user, nil } err = mod.UpdateUserAttrs(user.UserId, fields) if err != nil { log.Error("redis save", zap.Error(err)) } return user, nil } log.Error("redis read", zap.Error(err)) return nil, err } return user, nil } func on_bl_update_userinfo(ses nnet.ISession, pkt *RespPacket) { }