Commit 34263c32237ba5ffe9367b8c9b5f4d9fe4727c14
1 parent
3e479fb8
Exists in
master
提交
Showing
5 changed files
with
271 additions
and
35 deletions
Show diff stats
src/HttpServer/jsonconf/jsonconf.go
| @@ -12,55 +12,65 @@ var ( | @@ -12,55 +12,65 @@ var ( | ||
| 12 | ) | 12 | ) |
| 13 | 13 | ||
| 14 | type CardDesc struct { | 14 | type CardDesc struct { |
| 15 | - Time int `json:"time"` | ||
| 16 | - Ctype int `json:"type"` | ||
| 17 | - Desc string `json:"desc"` | 15 | + Time int `json:"time"` |
| 16 | + Ctype int `json:"type"` | ||
| 17 | + Desc string `json:"desc"` | ||
| 18 | Flop_card string `json:"flop_card"` | 18 | Flop_card string `json:"flop_card"` |
| 19 | } | 19 | } |
| 20 | 20 | ||
| 21 | type CatDesc struct { | 21 | type CatDesc struct { |
| 22 | - Id int `json:"id"` | ||
| 23 | - Name string `json:"name"` | ||
| 24 | - Level_buy int `json:"level_buy"` | ||
| 25 | - Rec_buy int `json:"rec_buy"` | ||
| 26 | - Price string `json:"price"` | ||
| 27 | - Gold_get string `json:"gold_get"` | ||
| 28 | - Ratio float32 `json:"ratio"` | ||
| 29 | - Increse_limit int `json:"increse_limit"` | ||
| 30 | - Interval float32 `json:"interval"` | 22 | + Id int `json:"id"` |
| 23 | + Name string `json:"name"` | ||
| 24 | + Level_buy int `json:"level_buy"` | ||
| 25 | + Rec_buy int `json:"rec_buy"` | ||
| 26 | + Price string `json:"price"` | ||
| 27 | + Gold_get string `json:"gold_get"` | ||
| 28 | + Ratio float32 `json:"ratio"` | ||
| 29 | + Increse_limit int `json:"increse_limit"` | ||
| 30 | + Interval float32 `json:"interval"` | ||
| 31 | } | 31 | } |
| 32 | 32 | ||
| 33 | type RedCatDesc struct { | 33 | type RedCatDesc struct { |
| 34 | - Id int `json:"id"` | ||
| 35 | - Name string `json:"name"` | ||
| 36 | - Skin string `json:"skin"` | ||
| 37 | - Money float32 `json:"money"` | ||
| 38 | - Rate float32 `json:"rate"` | ||
| 39 | - Is_37 int `json:"is_37"` | ||
| 40 | - Dec_red string `json:"dec_red"` | ||
| 41 | - Dec_get string `json:"dec_get"` | 34 | + Id int `json:"id"` |
| 35 | + Name string `json:"name"` | ||
| 36 | + Skin string `json:"skin"` | ||
| 37 | + Money float32 `json:"money"` | ||
| 38 | + Rate float32 `json:"rate"` | ||
| 39 | + Is_37 int `json:"is_37"` | ||
| 40 | + Dec_red string `json:"dec_red"` | ||
| 41 | + Dec_get string `json:"dec_get"` | ||
| 42 | } | 42 | } |
| 43 | 43 | ||
| 44 | type TurnTableDesc struct { | 44 | type TurnTableDesc struct { |
| 45 | - Id int `json:"id"` | ||
| 46 | - Ttype int `json:"type"` | ||
| 47 | - Rate float32 `json:"rate"` | ||
| 48 | - Parameter int `json:"parameter"` | ||
| 49 | - Desc string `json:"desc"` | ||
| 50 | - Idx int `json:"idx"` | 45 | + Id int `json:"id"` |
| 46 | + Ttype int `json:"type"` | ||
| 47 | + Rate float32 `json:"rate"` | ||
| 48 | + Parameter int `json:"parameter"` | ||
| 49 | + Desc string `json:"desc"` | ||
| 50 | + Idx int `json:"idx"` | ||
| 51 | } | 51 | } |
| 52 | 52 | ||
| 53 | type GameConfig struct { | 53 | type GameConfig struct { |
| 54 | - CardConfig []CardDesc | ||
| 55 | - CatConfig []CatDesc | ||
| 56 | - RedCatConfig []RedCatDesc | ||
| 57 | - TurnTableConfig []TurnTableDesc | 54 | + CardConfig []CardDesc |
| 55 | + CatConfig []CatDesc | ||
| 56 | + RedCatConfig []RedCatDesc | ||
| 57 | + TurnTableConfig []TurnTableDesc | ||
| 58 | } | 58 | } |
| 59 | 59 | ||
| 60 | func GetJsonConf() *GameConfig { | 60 | func GetJsonConf() *GameConfig { |
| 61 | return g_jsonconf | 61 | return g_jsonconf |
| 62 | } | 62 | } |
| 63 | 63 | ||
| 64 | +func GetTurnTable(ctype int) []TurnTableDesc { | ||
| 65 | + var rtslice []TurnTableDesc | ||
| 66 | + for _, v := range g_jsonconf.TurnTableConfig { | ||
| 67 | + if v.Ttype == ctype { | ||
| 68 | + rtslice = append(rtslice, v) | ||
| 69 | + } | ||
| 70 | + } | ||
| 71 | + return rtslice | ||
| 72 | +} | ||
| 73 | + | ||
| 64 | func GetCatConfig(lv int) *CatDesc { | 74 | func GetCatConfig(lv int) *CatDesc { |
| 65 | for _, v := range g_jsonconf.CatConfig { | 75 | for _, v := range g_jsonconf.CatConfig { |
| 66 | if v.Id == lv { | 76 | if v.Id == lv { |
| @@ -70,6 +80,16 @@ func GetCatConfig(lv int) *CatDesc { | @@ -70,6 +80,16 @@ func GetCatConfig(lv int) *CatDesc { | ||
| 70 | return nil | 80 | return nil |
| 71 | } | 81 | } |
| 72 | 82 | ||
| 83 | +//获取转盘配置 | ||
| 84 | +func GetTurnTableCfg(id int) *TurnTableDesc { | ||
| 85 | + for _, v := range g_jsonconf.TurnTableConfig { | ||
| 86 | + if v.Id == id { | ||
| 87 | + return &v | ||
| 88 | + } | ||
| 89 | + } | ||
| 90 | + return nil | ||
| 91 | +} | ||
| 92 | + | ||
| 73 | //获取红包猫配置 | 93 | //获取红包猫配置 |
| 74 | func GetRedCatConfig(lv int) *RedCatDesc { | 94 | func GetRedCatConfig(lv int) *RedCatDesc { |
| 75 | reallv := lv - 100 | 95 | reallv := lv - 100 |
| @@ -84,7 +104,6 @@ func GetRedCatConfig(lv int) *RedCatDesc { | @@ -84,7 +104,6 @@ func GetRedCatConfig(lv int) *RedCatDesc { | ||
| 84 | return nil | 104 | return nil |
| 85 | } | 105 | } |
| 86 | 106 | ||
| 87 | - | ||
| 88 | func file_get_contents(path string) ([]byte, error) { | 107 | func file_get_contents(path string) ([]byte, error) { |
| 89 | f, err := os.Open(path) | 108 | f, err := os.Open(path) |
| 90 | if err != nil { | 109 | if err != nil { |
| @@ -148,8 +167,6 @@ func LoadJsonConf() error { | @@ -148,8 +167,6 @@ func LoadJsonConf() error { | ||
| 148 | return err | 167 | return err |
| 149 | } | 168 | } |
| 150 | 169 | ||
| 151 | - | ||
| 152 | - | ||
| 153 | logger.Info("loadJsonConf success pconf=%v,err=%v", *g_jsonconf, err) | 170 | logger.Info("loadJsonConf success pconf=%v,err=%v", *g_jsonconf, err) |
| 154 | return err | 171 | return err |
| 155 | } | 172 | } |
src/HttpServer/logic/datadef.go
| @@ -210,6 +210,30 @@ type AddTicketResp struct { | @@ -210,6 +210,30 @@ type AddTicketResp struct { | ||
| 210 | Data AddTicketData `json:"data"` | 210 | Data AddTicketData `json:"data"` |
| 211 | } | 211 | } |
| 212 | 212 | ||
| 213 | +type MultipleData struct { | ||
| 214 | +} | ||
| 215 | + | ||
| 216 | +type MultipleReq struct { | ||
| 217 | + RewardId int `json:"rewardId"` | ||
| 218 | +} | ||
| 219 | + | ||
| 220 | +type MultipleResp struct { | ||
| 221 | + Code int `json:"code"` | ||
| 222 | + Message string `json:"message"` | ||
| 223 | + Data MultipleData `json:"data"` | ||
| 224 | +} | ||
| 225 | + | ||
| 226 | +type DrawTableData struct { | ||
| 227 | + RewardId int `json:"rewardId"` | ||
| 228 | + Coin string `json:"coin"` | ||
| 229 | +} | ||
| 230 | + | ||
| 231 | +type DrawTableResp struct { | ||
| 232 | + Code int `json:"code"` | ||
| 233 | + Message string `json:"message"` | ||
| 234 | + Data DrawTableData `json:"data"` | ||
| 235 | +} | ||
| 236 | + | ||
| 213 | type AcclecteBoxResp struct { | 237 | type AcclecteBoxResp struct { |
| 214 | Code int `json:"code"` | 238 | Code int `json:"code"` |
| 215 | Message string `json:"message"` | 239 | Message string `json:"message"` |
| @@ -584,6 +608,9 @@ type UserData struct { | @@ -584,6 +608,9 @@ type UserData struct { | ||
| 584 | GetWatchAdsGoldTime int //看广告领金币次数 | 608 | GetWatchAdsGoldTime int //看广告领金币次数 |
| 585 | DrawTicket int //抽奖券次数 | 609 | DrawTicket int //抽奖券次数 |
| 586 | DrawTicketTimes int //剩余增加抽奖券次数 | 610 | DrawTicketTimes int //剩余增加抽奖券次数 |
| 611 | + DratMult int //下次抽奖的倍数 | ||
| 612 | + DrawLastRewardId int //上一次的奖励ID | ||
| 613 | + DrawTableCount int //当前抽奖次数 5次以后归零 | ||
| 587 | IsAuto int //当前是否自动合成 | 614 | IsAuto int //当前是否自动合成 |
| 588 | IsBoxAcc int //是否处于加速生成箱子状态 | 615 | IsBoxAcc int //是否处于加速生成箱子状态 |
| 589 | RandGiftNum int //当前剩余空投猫粮次数 | 616 | RandGiftNum int //当前剩余空投猫粮次数 |
src/HttpServer/logic/function.go
| @@ -73,6 +73,52 @@ func (u *UserData) GetCatPos(catlv int) int { | @@ -73,6 +73,52 @@ func (u *UserData) GetCatPos(catlv int) int { | ||
| 73 | return pos | 73 | return pos |
| 74 | } | 74 | } |
| 75 | 75 | ||
| 76 | +//转盘抽奖 返回抽到的奖项的id | ||
| 77 | +func (u *UserData) DrawTable() int { | ||
| 78 | + idx := -1 | ||
| 79 | + if u.DrawTableCount != 3 { | ||
| 80 | + //抽a类型 | ||
| 81 | + sumrate := float32(0) | ||
| 82 | + tmprate := 0 | ||
| 83 | + rand.Seed(time.Now().UnixNano()) | ||
| 84 | + randnum := rand.Intn(100) | ||
| 85 | + cflist := jsonconf.GetTurnTable(1) | ||
| 86 | + for _, vv := range cflist { | ||
| 87 | + sumrate += vv.Rate | ||
| 88 | + } | ||
| 89 | + | ||
| 90 | + for _, v := range cflist { | ||
| 91 | + tmprate += int(v.Rate / sumrate) | ||
| 92 | + if tmprate >= randnum { | ||
| 93 | + idx = v.Id | ||
| 94 | + break | ||
| 95 | + } | ||
| 96 | + } | ||
| 97 | + | ||
| 98 | + } else { | ||
| 99 | + //抽b类型 | ||
| 100 | + sumrate := float32(0) | ||
| 101 | + tmprate := 0 | ||
| 102 | + rand.Seed(time.Now().UnixNano()) | ||
| 103 | + randnum := rand.Intn(100) | ||
| 104 | + cflist := jsonconf.GetTurnTable(2) | ||
| 105 | + for _, vv := range cflist { | ||
| 106 | + sumrate += vv.Rate | ||
| 107 | + } | ||
| 108 | + | ||
| 109 | + for _, v := range cflist { | ||
| 110 | + tmprate += int(v.Rate / sumrate) | ||
| 111 | + if tmprate >= randnum { | ||
| 112 | + idx = v.Id | ||
| 113 | + break | ||
| 114 | + } | ||
| 115 | + } | ||
| 116 | + } | ||
| 117 | + | ||
| 118 | + logger.Info("DrawTable idx=%v", idx) | ||
| 119 | + return idx | ||
| 120 | +} | ||
| 121 | + | ||
| 76 | func (u *UserData) HandlePassDay() { | 122 | func (u *UserData) HandlePassDay() { |
| 77 | isdiffday := false | 123 | isdiffday := false |
| 78 | nowtime := time.Now() | 124 | nowtime := time.Now() |
| @@ -108,7 +154,7 @@ func (u *UserData) HandlePassDay() { | @@ -108,7 +154,7 @@ func (u *UserData) HandlePassDay() { | ||
| 108 | u.DoubleLeftTimes = ACCGOLDRATELIMIT | 154 | u.DoubleLeftTimes = ACCGOLDRATELIMIT |
| 109 | u.GetWatchAdsGoldTime = WATCHADSGOLDLIMIT | 155 | u.GetWatchAdsGoldTime = WATCHADSGOLDLIMIT |
| 110 | u.DrawTicket = DRAWTICKETNUM | 156 | u.DrawTicket = DRAWTICKETNUM |
| 111 | - u.DoubleLeftTimes = DRAWTICKETGETLIMIT | 157 | + u.DrawTicketTimes = DRAWTICKETGETLIMIT |
| 112 | } | 158 | } |
| 113 | 159 | ||
| 114 | u.LastLoginTime = int(nowtime.Unix()) | 160 | u.LastLoginTime = int(nowtime.Unix()) |
| @@ -166,7 +212,9 @@ func InitUserInfo(data *UserLoginReq, resp *UserLoginResp, uuid int) { | @@ -166,7 +212,9 @@ func InitUserInfo(data *UserLoginReq, resp *UserLoginResp, uuid int) { | ||
| 166 | udata.RegTime = int(time.Now().Unix()) | 212 | udata.RegTime = int(time.Now().Unix()) |
| 167 | udata.LastLoginTime = int(time.Now().Unix()) | 213 | udata.LastLoginTime = int(time.Now().Unix()) |
| 168 | udata.DrawTicket = DRAWTICKETNUM | 214 | udata.DrawTicket = DRAWTICKETNUM |
| 169 | - udata.DoubleLeftTimes = DRAWTICKETGETLIMIT | 215 | + udata.DrawTicketTimes = DRAWTICKETGETLIMIT |
| 216 | + udata.DratMult = 1 | ||
| 217 | + udata.DrawTableCount = 1 | ||
| 170 | 218 | ||
| 171 | //初始化16个猫爬架 | 219 | //初始化16个猫爬架 |
| 172 | for i := 0; i < 16; i++ { | 220 | for i := 0; i < 16; i++ { |
src/HttpServer/logic/httpserver.go
| @@ -43,6 +43,8 @@ func startServerHttpServe() { | @@ -43,6 +43,8 @@ func startServerHttpServe() { | ||
| 43 | http.HandleFunc("/api/home/limitCatList", LimitCatList) //分红猫列表 | 43 | http.HandleFunc("/api/home/limitCatList", LimitCatList) //分红猫列表 |
| 44 | http.HandleFunc("/api/turntable/index", QueryTurntable) //转盘主页 | 44 | http.HandleFunc("/api/turntable/index", QueryTurntable) //转盘主页 |
| 45 | http.HandleFunc("/api/turntable/addTicket", AddTicket) //增加抽奖券 | 45 | http.HandleFunc("/api/turntable/addTicket", AddTicket) //增加抽奖券 |
| 46 | + http.HandleFunc("/api/turntable/multiple", Multiple) //增加倍数 | ||
| 47 | + http.HandleFunc("/api/turntable/draw", DrawTable) //抽奖 | ||
| 46 | 48 | ||
| 47 | /////---------------------------------------------------------------------old | 49 | /////---------------------------------------------------------------------old |
| 48 | http.HandleFunc("/happycat/exchangetwoPos", ExchangePos) //交换位置 | 50 | http.HandleFunc("/happycat/exchangetwoPos", ExchangePos) //交换位置 |
| @@ -637,6 +639,42 @@ func RedCatList(w http.ResponseWriter, r *http.Request) { | @@ -637,6 +639,42 @@ func RedCatList(w http.ResponseWriter, r *http.Request) { | ||
| 637 | //HandlerRecvTimingReward(w, s, Uuid) | 639 | //HandlerRecvTimingReward(w, s, Uuid) |
| 638 | } | 640 | } |
| 639 | 641 | ||
| 642 | +func DrawTable(w http.ResponseWriter, r *http.Request) { | ||
| 643 | + Uuid := 0 | ||
| 644 | + if len(r.Header) > 0 { | ||
| 645 | + Uuid, _ = strconv.Atoi(r.Header.Get("uid")) | ||
| 646 | + } | ||
| 647 | + if Uuid == 0 { | ||
| 648 | + SetHeader(w) | ||
| 649 | + return | ||
| 650 | + } | ||
| 651 | + result, _ := ioutil.ReadAll(r.Body) | ||
| 652 | + r.Body.Close() | ||
| 653 | + | ||
| 654 | + s := string(result) | ||
| 655 | + logger.Info("DrawTable , body:%v,uuid=%v", s, Uuid) | ||
| 656 | + | ||
| 657 | + HandlerDrawTable(w, s, Uuid) | ||
| 658 | +} | ||
| 659 | + | ||
| 660 | +func Multiple(w http.ResponseWriter, r *http.Request) { | ||
| 661 | + Uuid := 0 | ||
| 662 | + if len(r.Header) > 0 { | ||
| 663 | + Uuid, _ = strconv.Atoi(r.Header.Get("uid")) | ||
| 664 | + } | ||
| 665 | + if Uuid == 0 { | ||
| 666 | + SetHeader(w) | ||
| 667 | + return | ||
| 668 | + } | ||
| 669 | + result, _ := ioutil.ReadAll(r.Body) | ||
| 670 | + r.Body.Close() | ||
| 671 | + | ||
| 672 | + s := string(result) | ||
| 673 | + logger.Info("Multiple , body:%v,uuid=%v", s, Uuid) | ||
| 674 | + | ||
| 675 | + HandlerMultiple(w, s, Uuid) | ||
| 676 | +} | ||
| 677 | + | ||
| 640 | func AddTicket(w http.ResponseWriter, r *http.Request) { | 678 | func AddTicket(w http.ResponseWriter, r *http.Request) { |
| 641 | Uuid := 0 | 679 | Uuid := 0 |
| 642 | if len(r.Header) > 0 { | 680 | if len(r.Header) > 0 { |
src/HttpServer/logic/logic.go
| @@ -403,6 +403,112 @@ func HandlerGetMainPageInfo(w http.ResponseWriter, data string, uuid int) { | @@ -403,6 +403,112 @@ func HandlerGetMainPageInfo(w http.ResponseWriter, data string, uuid int) { | ||
| 403 | fmt.Fprint(w, string(respstr)) | 403 | fmt.Fprint(w, string(respstr)) |
| 404 | } | 404 | } |
| 405 | 405 | ||
| 406 | +func HandlerDrawTable(w http.ResponseWriter, data string, uuid int) { | ||
| 407 | + SetHeader(w) | ||
| 408 | + var resp DrawTableResp | ||
| 409 | + resp.Code = 0 | ||
| 410 | + resp.Message = "success" | ||
| 411 | + | ||
| 412 | + for { | ||
| 413 | + | ||
| 414 | + uinfo, err := GetUserInfo(strconv.Itoa(uuid)) | ||
| 415 | + if err != nil || uinfo == nil { | ||
| 416 | + logger.Error("HandlerDrawTable getuserinfo failed=%v", err) | ||
| 417 | + resp.Code = 1 | ||
| 418 | + resp.Message = "get userinfo failed" | ||
| 419 | + break | ||
| 420 | + } | ||
| 421 | + | ||
| 422 | + //抽奖券数量是否足够 | ||
| 423 | + if uinfo.DrawTicket <= 0 { | ||
| 424 | + logger.Error("HandlerDrawTable ticketnotenough failed=%v", err) | ||
| 425 | + resp.Code = 1 | ||
| 426 | + resp.Message = "ticketnotenough" | ||
| 427 | + break | ||
| 428 | + } | ||
| 429 | + | ||
| 430 | + //根据抽奖次数 | ||
| 431 | + tid := uinfo.DrawTable() | ||
| 432 | + tablecfg := jsonconf.GetTurnTableCfg(tid) | ||
| 433 | + if tablecfg == nil { | ||
| 434 | + logger.Error("HandlerDrawTable tid failed=%v", tid) | ||
| 435 | + resp.Code = 1 | ||
| 436 | + resp.Message = "tidnotright" | ||
| 437 | + break | ||
| 438 | + } | ||
| 439 | + | ||
| 440 | + //加金币 此处现金概率为零不做处理 | ||
| 441 | + | ||
| 442 | + addgold := int64(tablecfg.Parameter) * uinfo.Goldrate | ||
| 443 | + if uinfo.DratMult != 1 { | ||
| 444 | + addgold = addgold * int64(uinfo.DratMult) | ||
| 445 | + } | ||
| 446 | + | ||
| 447 | + uinfo.DrawTicket-- | ||
| 448 | + uinfo.DratMult = 1 | ||
| 449 | + uinfo.DrawTableCount++ | ||
| 450 | + if uinfo.DrawTableCount > 5 { | ||
| 451 | + uinfo.DrawTableCount = 1 | ||
| 452 | + } | ||
| 453 | + | ||
| 454 | + uinfo.Gold += addgold | ||
| 455 | + | ||
| 456 | + resp.Data.Coin = strconv.FormatInt(uinfo.Gold, 10) | ||
| 457 | + resp.Data.RewardId = tid | ||
| 458 | + resp.Code = 0 | ||
| 459 | + break | ||
| 460 | + } | ||
| 461 | + | ||
| 462 | + //回包 | ||
| 463 | + logger.Info("HandlerDrawTable resp=%+v", resp) | ||
| 464 | + respstr, _ := json.Marshal(&resp) | ||
| 465 | + fmt.Fprint(w, string(respstr)) | ||
| 466 | + | ||
| 467 | +} | ||
| 468 | + | ||
| 469 | +func HandlerMultiple(w http.ResponseWriter, data string, uuid int) { | ||
| 470 | + SetHeader(w) | ||
| 471 | + var resp MultipleResp | ||
| 472 | + resp.Code = 0 | ||
| 473 | + resp.Message = "success" | ||
| 474 | + var rdata MultipleReq | ||
| 475 | + | ||
| 476 | + err := json.Unmarshal([]byte(data), &rdata) | ||
| 477 | + for { | ||
| 478 | + if err != nil { | ||
| 479 | + logger.Error("HandlerMultiple json unmarshal failed=%v", err) | ||
| 480 | + resp.Code = 1 | ||
| 481 | + resp.Message = "json failed" | ||
| 482 | + break | ||
| 483 | + } | ||
| 484 | + | ||
| 485 | + uinfo, err := GetUserInfo(strconv.Itoa(uuid)) | ||
| 486 | + if err != nil || uinfo == nil { | ||
| 487 | + logger.Error("HandlerMultiple getuserinfo failed=%v", err) | ||
| 488 | + resp.Code = 1 | ||
| 489 | + resp.Message = "get userinfo failed" | ||
| 490 | + break | ||
| 491 | + } | ||
| 492 | + cfg := jsonconf.GetTurnTableCfg(rdata.RewardId) | ||
| 493 | + if cfg == nil { | ||
| 494 | + logger.Error("HandlerMultiple getcfgfailed failed=%v", rdata.RewardId) | ||
| 495 | + resp.Code = 1 | ||
| 496 | + resp.Message = "getcfgfailed failed" | ||
| 497 | + break | ||
| 498 | + } | ||
| 499 | + | ||
| 500 | + uinfo.DratMult = cfg.Parameter | ||
| 501 | + SaveUserInfo(uinfo, strconv.Itoa(uuid)) | ||
| 502 | + resp.Code = 0 | ||
| 503 | + break | ||
| 504 | + } | ||
| 505 | + | ||
| 506 | + //回包 | ||
| 507 | + respstr, _ := json.Marshal(&resp) | ||
| 508 | + fmt.Fprint(w, string(respstr)) | ||
| 509 | + | ||
| 510 | +} | ||
| 511 | + | ||
| 406 | func HandlerAddTicket(w http.ResponseWriter, data string, uuid int) { | 512 | func HandlerAddTicket(w http.ResponseWriter, data string, uuid int) { |
| 407 | SetHeader(w) | 513 | SetHeader(w) |
| 408 | var resp AddTicketResp | 514 | var resp AddTicketResp |