Commit bf38495cd5410a906e9d661dbebd6131e930e89a

Authored by 陆恒
1 parent 17901090
Exists in master

提交基本登录接口

src/HttpServer/logic/datadef.go
... ... @@ -9,19 +9,15 @@ package logic
9 9 //"107":"签到罐"
10 10  
11 11 type UserLoginReq struct {
12   - Fromid int `json:"fromid"`
13   - Sharetype int `json:"sharetype"`
14   - Gameid string `json:"gameid"`
15   - Channel string `json:"channel"`
  12 +
16 13 }
17 14  
18 15 type UserLoginData struct {
  16 + Isnew int `json:"isnew"`
19 17 Walletgold int `json:"walletgold"`
20   - Leftredbagcnt int `json:"leftredbagcnt"`
21   - Guangold int `json:"guangold"`
22   - Userlv int `json:"userlv"`
23   - Userexp int `json:"userexp"`
24   - Sumloginday int `json:"sumloginday"`
  18 + Guangold int `json:"guangold"`
  19 + PlayerData string `json:"playerData"`
  20 +
25 21 }
26 22  
27 23 type UserLoginResp struct {
... ... @@ -332,14 +328,13 @@ type WithDrawDesc struct {
332 328 Cid int `json:"cid"`
333 329 Cnum float32 `json:"cnum"`
334 330 Isnew int `json:"isnew"`
335   - Limitlv int `json:"limitlv"`
336 331 Preisfind int `json:"preisfind"`
337 332 Day int `json:"day"`
338 333 }
339 334  
340 335 //玩家数据
341 336 type UserData struct {
342   - Userid int //玩家id
  337 + Userid string //玩家w唯一id
343 338 Lv int //玩家当前等级
344 339 LvRewardGet int //当前等级奖励是否已经领取 1未领取 2普通领取 3双倍领取
345 340 Exp int //玩家当前经验值
... ...
src/HttpServer/logic/function.go
1 1 package logic
2 2  
3   -import "net/http"
  3 +import (
  4 + "HttpServer/jsonconf"
  5 + "HttpServer/redishandler"
  6 + "bytes"
  7 + "common/logger"
  8 + "common/redis"
  9 + "crypto/md5"
  10 + "encoding/hex"
  11 + "encoding/json"
  12 + "errors"
  13 + "io/ioutil"
  14 + "net/http"
  15 + "sort"
  16 + "strconv"
  17 + "time"
  18 +)
4 19  
5 20 func SetHeader(w http.ResponseWriter) {
6 21 w.Header().Set("Access-Control-Allow-Origin", "*") //允许访问所有域
7 22 w.Header().Set("Content-Type", "application/json")
8   - w.Header().Set("Access-Control-Allow-Headers", "Content-Type,Uuid")
  23 + w.Header().Set("Access-Control-Allow-Headers", "Content-Type,Uuid,Gameid,Channel")
  24 +}
  25 +
  26 +func GettotalParam(paramlist []string) string {
  27 + //排序
  28 + sort.Strings(paramlist)
  29 +
  30 + //拼接
  31 + sumparam := ""
  32 + for _, val := range paramlist {
  33 + sumparam += val
  34 + }
  35 +
  36 + return sumparam
  37 +}
  38 +
  39 +func GetHashValue(signsum string) string {
  40 + /*h := sha1.New()
  41 + h.Write([]byte(signsum))
  42 + bs := h.Sum(nil)
  43 + sign := hex.EncodeToString(bs)*/
  44 + ctx := md5.New()
  45 + ctx.Write([]byte(signsum))
  46 + return hex.EncodeToString(ctx.Sum(nil))
  47 +}
  48 +
  49 +func DoHttpPost(bys []byte, apistr string) (string, error) {
  50 + body := bytes.NewBuffer(bys)
  51 + url1 := XIAOXINGXING_SDKURLOFFICAL + apistr //"api/server/addcoin"
  52 +
  53 + res, err := http.Post(url1, "application/json;charset=utf-8", body)
  54 + if err != nil {
  55 + logger.Error("DoHttpPost failed err=%v", err)
  56 + return "", err
  57 + }
  58 + result, _ := ioutil.ReadAll(res.Body)
  59 + defer res.Body.Close()
  60 +
  61 + return string(result), nil
  62 +}
  63 +
  64 +func GetCoinFromSdk(uuid int, gameid string, channel string) (int, error) {
  65 +
  66 + SERVERKEY := XIAOXINGXING_SERVERKEYTEST
  67 + if gameid == "1015" {
  68 + SERVERKEY = XIAOXINGXING_SERVERKEYTEST_1015
  69 + }
  70 +
  71 + var paramlist []string
  72 + var params GetCoinDesc
  73 + params.Sign_type = "md5"
  74 + params.Gameid = gameid
  75 + params.Channel = channel
  76 + params.Uid = uuid
  77 + params.Time_stamp = strconv.Itoa(int(time.Now().Unix()))
  78 + signtypestr := "sign_type=" + params.Sign_type
  79 + timestampstr := "time_stamp=" + strconv.Itoa(int(time.Now().Unix()))
  80 + paramgameid := "gameid=" + gameid
  81 + pchannel := "channel=" + channel
  82 + puid := "uid=" + strconv.Itoa(uuid)
  83 + paramlist = append(paramlist, signtypestr)
  84 + paramlist = append(paramlist, timestampstr)
  85 + paramlist = append(paramlist, paramgameid)
  86 + paramlist = append(paramlist, pchannel)
  87 + paramlist = append(paramlist, puid)
  88 +
  89 + sumparam := GettotalParam(paramlist)
  90 + //加serverkey
  91 + signsum := sumparam + SERVERKEY
  92 +
  93 + //进行hash
  94 + sign := GetHashValue(signsum)
  95 + params.Sign = sign
  96 + logger.Info("GetCoinFromSdk sumparam is:%v,sign is:", signsum, sign)
  97 +
  98 + bys, err := json.Marshal(&params)
  99 + if err != nil {
  100 + logger.Error("GetCoinFromSdk failed=%v", err)
  101 + return 0, err
  102 + }
  103 + res, err := DoHttpPost(bys, "api/server/getcoin")
  104 + if err != nil {
  105 + logger.Error("GetCoinFromSdk failed=%v", err)
  106 + return 0, err
  107 + }
  108 +
  109 + logger.Info("GetCoinFromSdk res=%v", res)
  110 +
  111 + var resp AddCoinResp
  112 + err = json.Unmarshal([]byte(res), &resp)
  113 + if err != nil {
  114 + logger.Error("GetCoinFromSdk failed=%v", err)
  115 + return 0, err
  116 + }
  117 +
  118 + if resp.Code != "0" {
  119 + logger.Error("GetCoinFromSdk failed=%v", resp.Msg)
  120 + return 0, err
  121 + }
  122 +
  123 + return resp.Data.Mycoin, nil
  124 +}
  125 +
  126 +//1任务 2成就
  127 +func GetTaskInfo(uuid int, tasktype int, channel string) (*TaskList, error) {
  128 + unqiueuuid := strconv.Itoa(uuid) + channel
  129 + var data string
  130 + var err error
  131 + if tasktype == 1 {
  132 + data, err = redishandler.GetRedisClient().HGet(redis.USER_TASKINFO_LIST, unqiueuuid)
  133 + //兼容老的数据
  134 + if err != nil {
  135 + //没有读到数据 则去读取一下老的id
  136 + olddata, err := redishandler.GetRedisClient().HGet(redis.USER_TASKINFO_LIST, strconv.Itoa(uuid))
  137 + if err == nil {
  138 + err = redishandler.GetRedisClient().HSet(redis.USER_TASKINFO_LIST, unqiueuuid, olddata)
  139 + if err == nil {
  140 + //删除老的数据 以后都走新的数据
  141 + err = redishandler.GetRedisClient().HDel(redis.USER_TASKINFO_LIST, strconv.Itoa(uuid))
  142 + logger.Info("GetTaskInfo uuid=%v do set", uuid)
  143 + }
  144 + data, err = redishandler.GetRedisClient().HGet(redis.USER_TASKINFO_LIST, unqiueuuid)
  145 + }
  146 + }
  147 + } else if tasktype == 2 {
  148 + data, err = redishandler.GetRedisClient().HGet(redis.USER_ACHIEVEMENTINFO_LIST, unqiueuuid)
  149 + //成就这一块需要兼容老的数据
  150 + if err != nil {
  151 + //没有读到数据 则去读取一下老的id
  152 + olddata, err := redishandler.GetRedisClient().HGet(redis.USER_ACHIEVEMENTINFO_LIST, strconv.Itoa(uuid))
  153 + if err == nil {
  154 + err = redishandler.GetRedisClient().HSet(redis.USER_ACHIEVEMENTINFO_LIST, unqiueuuid, olddata)
  155 + if err == nil {
  156 + //删除老的数据 以后都走新的数据
  157 + err = redishandler.GetRedisClient().HDel(redis.USER_ACHIEVEMENTINFO_LIST, strconv.Itoa(uuid))
  158 + logger.Info("GetTaskInfo uuid=%v do set", uuid)
  159 + }
  160 + data, err = redishandler.GetRedisClient().HGet(redis.USER_ACHIEVEMENTINFO_LIST, unqiueuuid)
  161 + }
  162 + }
  163 + } else {
  164 + logger.Error("tasktype invalid")
  165 + return nil, errors.New("tasktype invalid")
  166 + }
  167 +
  168 + if err != nil {
  169 + return nil, err
  170 + }
  171 +
  172 + var list TaskList
  173 + err = json.Unmarshal([]byte(data), &list)
  174 + if err != nil {
  175 + logger.Error("GetTaskInfo err=%v", err)
  176 + return nil, err
  177 + }
  178 +
  179 + return &list, err
  180 +}
  181 +
  182 +func SaveTaskInfo(uuid string, tasktype int, list *TaskList) error {
  183 + savestr, err := json.Marshal(list)
  184 + if err != nil {
  185 + logger.Error("SaveTaskInfo err =%v", err)
  186 + return err
  187 + }
  188 +
  189 + if tasktype == 1 {
  190 + err = redishandler.GetRedisClient().HSet(redis.USER_TASKINFO_LIST, uuid, string(savestr))
  191 + } else if tasktype == 2 {
  192 + err = redishandler.GetRedisClient().HSet(redis.USER_ACHIEVEMENTINFO_LIST, uuid, string(savestr))
  193 + //logger.Info("SaveTaskInfo savestr=%v", string(savestr))
  194 + } else {
  195 + logger.Error("tasktype invalid")
  196 + return errors.New("tasktype invalid")
  197 + }
  198 + return err
  199 +}
  200 +
  201 +func (t *TaskList) IsInTaskList(id int) bool {
  202 + for _, val := range t.Taskdata {
  203 + if val.Taskid == id {
  204 + return true
  205 + }
  206 + }
  207 + return false
  208 +}
  209 +
  210 +func InitTaskAndAchievement(uuid int, channel string) error {
  211 + unqiueid := strconv.Itoa(uuid) + channel
  212 + //先初始化任务
  213 + tlist, err := GetTaskInfo(uuid, 1, channel)
  214 + if tlist == nil {
  215 + tasklist := new(TaskList)
  216 + for _, val := range jsonconf.GetJsonConf().TaskConfig {
  217 + var tmp TaskListDesc
  218 + tmp.Taskstatus = 1
  219 + tmp.Taskid = val.Id
  220 + tmp.Taskprogress = 0
  221 + tasklist.Taskdata = append(tasklist.Taskdata, tmp)
  222 + }
  223 +
  224 + err := SaveTaskInfo(unqiueid, 1, tasklist)
  225 + if err != nil {
  226 + logger.Error("InitTaskAndAchievement err=%v", err)
  227 + //return err
  228 + }
  229 + } else {
  230 + for _, val := range jsonconf.GetJsonConf().TaskConfig {
  231 + if !tlist.IsInTaskList(val.Id) {
  232 + var tmp TaskListDesc
  233 + tmp.Taskstatus = 1
  234 + tmp.Taskid = val.Id
  235 + tmp.Taskprogress = 0
  236 + tlist.Taskdata = append(tlist.Taskdata, tmp)
  237 + }
  238 + }
  239 +
  240 + for k, _ := range tlist.Taskdata {
  241 + tlist.Taskdata[k].Taskprogress = 0
  242 + tlist.Taskdata[k].Taskstatus = 1
  243 +
  244 + }
  245 +
  246 + err := SaveTaskInfo(unqiueid, 1, tlist)
  247 + if err != nil {
  248 + logger.Error("InitTaskAndAchievement err=%v", err)
  249 + //return err
  250 + }
  251 + }
  252 +
  253 + //成就
  254 + alist, err := GetTaskInfo(uuid, 2, channel)
  255 + if alist == nil {
  256 + achievelist := new(TaskList)
  257 + for _, val := range jsonconf.GetJsonConf().AchieventConfig {
  258 + var tmp TaskListDesc
  259 + tmp.Taskstatus = 1
  260 + tmp.Taskid = val.Id
  261 + tmp.Taskprogress = 0
  262 + achievelist.Taskdata = append(achievelist.Taskdata, tmp)
  263 + }
  264 +
  265 + err = SaveTaskInfo(unqiueid, 2, achievelist)
  266 + if err != nil {
  267 + logger.Error("InitTaskAndAchievement err=%v", err)
  268 + return err
  269 + }
  270 + } else {
  271 + for _, val := range jsonconf.GetJsonConf().AchieventConfig {
  272 + if !alist.IsInTaskList(val.Id) {
  273 + var tmp TaskListDesc
  274 + tmp.Taskstatus = 1
  275 + tmp.Taskid = val.Id
  276 + tmp.Taskprogress = 0
  277 + alist.Taskdata = append(alist.Taskdata, tmp)
  278 + }
  279 + }
  280 +
  281 + err = SaveTaskInfo(unqiueid, 2, alist)
  282 + if err != nil {
  283 + logger.Error("InitTaskAndAchievement err=%v", err)
  284 + return err
  285 + }
  286 + }
  287 +
  288 + return nil
  289 +}
  290 +
  291 +
  292 +func InitUserInfo(resp *UserLoginResp, uniqueuid ,gameid ,channel string,uuid int) error {
  293 +
  294 + var initdata UserData
  295 + initdata.Lv = 1
  296 + initdata.LvRewardGet = 0
  297 + initdata.Exp = 0
  298 + initdata.Userid = uniqueuid
  299 + initdata.ContinueLoginDay = 1
  300 + initdata.SumLoginDay = 1
  301 + initdata.GetFromGuanCnt = 0
  302 + initdata.GuanGold = 0
  303 + initdata.LastLoginTime = int(time.Now().Unix())
  304 + goldnum, _ := GetCoinFromSdk(uuid, gameid, channel)
  305 + initdata.RealGold = goldnum
  306 + initdata.WatchAddsTime = WATCH_ADD_DAY_LIMIT
  307 + initdata.LeftFreeRB = FREE_REDBAG_NUM
  308 + initdata.UpLvCostTime = 0
  309 + initdata.UpLvCostTimeSec = int(time.Now().Unix())
  310 +
  311 + for _, val := range jsonconf.GetJsonConf().RmbConfig {
  312 + var tmp WithDrawDesc
  313 + tmp.Cid = val.Id
  314 + tmp.Cnum = val.Rmb_num
  315 + if val.Time == 1 {
  316 + tmp.Isnew = 1
  317 + } else {
  318 + tmp.Isnew = 2
  319 + }
  320 + if val.Id == 1 {
  321 + tmp.Preisfind = 1
  322 + } else {
  323 + tmp.Preisfind = 0
  324 + }
  325 + tmp.Day = val.Login_day
  326 + initdata.WithDraw.Cashdata = append(initdata.WithDraw.Cashdata, tmp)
  327 + }
  328 +
  329 + resp.Data.Guangold = initdata.GuanGold
  330 + resp.Data.Walletgold = initdata.RealGold
  331 + resp.Data.Isnew = 1
  332 +
  333 + err := SaveUserInfo(&initdata, uniqueuid)
  334 + if err != nil {
  335 + logger.Error("InitUserInfo err=%v", err)
  336 + return err
  337 + }
  338 +
  339 + //初始化一下玩家的任务与成就数据数据
  340 + err = InitTaskAndAchievement(uuid, channel)
  341 +
  342 + return err
  343 +}
  344 +
  345 +func SaveUserInfo(data *UserData, uniqueid string) error {
  346 +
  347 + savestr, err := json.Marshal(data)
  348 + if err != nil {
  349 + return err
  350 + }
  351 +
  352 + err = redishandler.GetRedisClient().HSet(redis.USER_DATA_KEY, uniqueid, string(savestr))
  353 +
  354 + return err
  355 +}
  356 +
  357 +func GetUserInfo(uniqueid string) (*UserData, error) {
  358 +
  359 + data, err := redishandler.GetRedisClient().HGet(redis.USER_DATA_KEY, uniqueid)
  360 + if err != nil {
  361 + return nil, err
  362 + }
  363 + var tmp UserData
  364 + err = json.Unmarshal([]byte(data), &tmp)
  365 + if err != nil {
  366 + return nil, err
  367 + }
  368 +
  369 + return &tmp, nil
  370 +}
  371 +
  372 +func SaveUserSelfData(uniqueid ,savedata string) error {
  373 + err := redishandler.GetRedisClient().HSet(redis.USER_DATA_KEY, uniqueid, savedata)
  374 + return err
  375 +}
  376 +
  377 +func GetUserSelfData(uniqueid string) (string,error) {
  378 + data, err := redishandler.GetRedisClient().HGet(redis.USER_SELF_DATA_KEY, uniqueid)
  379 + if err != nil {
  380 + return "", err
  381 + }
  382 +
  383 +
  384 + return data, nil
9 385 }
10 386 \ No newline at end of file
... ...
src/HttpServer/logic/httpserver.go
... ... @@ -94,7 +94,7 @@ func ClearData(w http.ResponseWriter, r *http.Request) {
94 94 redishandler.GetRedisClient().HDel(redis.USER_DATA_KEY, rkey)
95 95 redishandler.GetRedisClient().HDel(redis.USER_TASKINFO_LIST, rkey)
96 96 redishandler.GetRedisClient().HDel(redis.USER_ACHIEVEMENTINFO_LIST, rkey)
97   - redishandler.GetRedisClient().HDel(redis.USER_WITHDRAW_RECORDLIST, rkey)
  97 + //redishandler.GetRedisClient().HDel(redis.USER_WITHDRAW_RECORDLIST, rkey)
98 98  
99 99 fmt.Fprint(w, "success!")
100 100 }
... ... @@ -564,23 +564,29 @@ func Watchads(w http.ResponseWriter, r *http.Request) {
564 564  
565 565 func UserLogin(w http.ResponseWriter, r *http.Request) {
566 566  
  567 + gameid := ""
  568 + channel := ""
  569 + uniqueid := ""
567 570 Uuid := 0
568 571 if len(r.Header) > 0 {
569 572 Uuid, _ = strconv.Atoi(r.Header.Get("Uuid"))
  573 + gameid = r.Header.Get("Gameid")
  574 + channel = r.Header.Get("Channel")
  575 + uniqueid = r.Header.Get("Uuid") + r.Header.Get("Channel")
570 576 }
571 577  
572 578 if Uuid == 0 {
573 579 SetHeader(w)
574   - //logger.Error("Uuid is nil!")
  580 + logger.Error("Uuid is nil!")
575 581 return
576 582 }
577 583 result, _ := ioutil.ReadAll(r.Body)
578 584 r.Body.Close()
579 585  
580 586 s := string(result)
581   - logger.Info("UserLogin , body:%v,uuid=%v", s, Uuid)
  587 + logger.Info("UserLogin , body:%v,uuid=%v", s, uniqueid)
582 588  
583   - //HandlerLogin(w, s, Uuid)
  589 + HandlerLogin(w, s, uniqueid,gameid,channel,Uuid)
584 590 }
585 591  
586 592 func Getuserdata(w http.ResponseWriter, r *http.Request) {
... ...
src/HttpServer/logic/logic.go
1   -package logic
2 1 \ No newline at end of file
  2 +package logic
  3 +
  4 +import (
  5 + "HttpServer/redishandler"
  6 + "common/logger"
  7 + "common/redis"
  8 + "encoding/json"
  9 + "fmt"
  10 + "net/http"
  11 +)
  12 +
  13 +func HandlerLogin(w http.ResponseWriter, data string, uniqueuuid ,gameid,channel string,uuid int) {
  14 + SetHeader(w)
  15 +
  16 + var resp UserLoginResp
  17 + resp.Code = 0
  18 +
  19 + for {
  20 +
  21 + //先判断一下是否是新用户
  22 + isexist, err := redishandler.GetRedisClient().HExists(redis.USER_DATA_KEY, uniqueuuid)
  23 + if err != nil {
  24 + logger.Error("redis failed err=%v", err)
  25 + resp.Message = "服务器错误"
  26 + resp.Code = ERROR_SRV_ERROR
  27 + break
  28 + }
  29 +
  30 + if !isexist {
  31 + //不存在
  32 +
  33 + //不存在老的数据 之间走新号流程
  34 + err = InitUserInfo(&resp, uniqueuuid,gameid,channel,uuid)
  35 +
  36 +
  37 + } else {
  38 + uinfo, err := GetUserInfo(uniqueuuid)
  39 +
  40 + if err != nil {
  41 + logger.Info("GetUserInfo HandlerLogin data failed:%v,for:%v", err, data)
  42 + resp.Message = "GetUserInfo failed"
  43 + resp.Code = 1
  44 + break
  45 + }
  46 +
  47 +
  48 +
  49 + resp.Data.Guangold = uinfo.GuanGold
  50 + resp.Data.Walletgold = uinfo.RealGold
  51 +
  52 + resp.Data.Isnew= 0
  53 + }
  54 +
  55 + pdata,err := GetUserSelfData(uniqueuuid)
  56 +
  57 + if err != nil {
  58 + logger.Info("GetUserSelfData HandlerLogin data failed:%v,for:%v", err, data)
  59 + resp.Message = "GetUserSelfData failed"
  60 + resp.Code = 1
  61 + break
  62 + }
  63 + resp.Data.PlayerData = pdata
  64 +
  65 +
  66 + resp.Code = ERROR_OK
  67 + break
  68 + }
  69 +
  70 + //回包
  71 + respstr, _ := json.Marshal(&resp)
  72 + fmt.Fprint(w, string(respstr))
  73 +
  74 + logger.Info("###HandlerLogin###rdata:%v", string(respstr))
  75 +}
3 76 \ No newline at end of file
... ...
src/common/redis/def.go
1 1 package redis
2 2  
3 3 const (
4   - USER_DATA_KEY = "STARSTAR_USER_DATA_KEY" //玩家数据
5   - USER_WITHDRAW_RECORDLIST = "STARSTAR_USER_WITHDRAW_RECORDLIST" //玩家提现记录
6   - USER_TASKINFO_LIST = "STARSTAR_USER_TASKINFO_LIST" //任务列表数据缓存
7   - USER_ACHIEVEMENTINFO_LIST = "STARSTAR_USER_ACHIEVEMENTINFO_LIST" //成就列表数据缓存
  4 + USER_DATA_KEY = "RUSSIAXIAOXIAO_USER_DATA_KEY" //玩家数据
  5 + USER_SELF_DATA_KEY = "RUSSIAXIAOXIAO_USER_SELF_DATA_KEY" //玩家自定义数据
  6 + USER_TASKINFO_LIST = "RUSSIAXIAOXIAO_USER_TASKINFO_LIST" //任务列表数据缓存
  7 + USER_ACHIEVEMENTINFO_LIST = "RUSSIAXIAOXIAO_USER_ACHIEVEMENTINFO_LIST" //成就列表数据缓存
8 8  
9 9 )
... ...