package main // //import ( // "encoding/json" // "errors" // "mongo.games.com/game/common" // "mongo.games.com/game/model" // "mongo.games.com/game/webapi" // "mongo.games.com/goserver/core/basic" // "mongo.games.com/goserver/core/i18n" // "mongo.games.com/goserver/core/logger" // "mongo.games.com/goserver/core/task" // "mongo.games.com/goserver/core/transact" // "time" //) // ////比赛相关提供给后台的API //func init() { // //------------------------------------------------------------------------------------------------------- // //更新比赛配置 // WebAPIHandlerMgrSingleton.RegisteWebAPIHandler("/api/Match/UpdateMatchConfig", WebAPIHandlerWrapper( // func(tNode *transact.TransNode, params webapi.RequestBody) (int, webapi.ResponseBody) { // resp := webapi.NewResponseBody() // params_data, _ := params.GetRequestBody("Param") // if data, ok := params_data.GetRequestBody("Data"); ok { // buf, err := json.Marshal(data) // if err != nil { // resp[webapi.RESPONSE_STATE] = webapi.STATE_ERR // resp[webapi.RESPONSE_ERRMSG] = "params error!" // return common.ResponseTag_ParamError, resp // } // // var cfg MatchConfig // err = json.Unmarshal(buf, &cfg) // if err != nil { // resp[webapi.RESPONSE_STATE] = webapi.STATE_ERR // resp[webapi.RESPONSE_ERRMSG] = "params error!" // return common.ResponseTag_ParamError, resp // } // // MatchMgrSington.UpdateConfig(&cfg, false) // resp[webapi.RESPONSE_STATE] = webapi.STATE_OK // return common.ResponseTag_Ok, resp // } // // resp[webapi.RESPONSE_STATE] = webapi.STATE_ERR // resp[webapi.RESPONSE_ERRMSG] = "need Data!" // return common.ResponseTag_ParamError, resp // })) // // //------------------------------------------------------------------------------------------------------- // //删除比赛配置 // WebAPIHandlerMgrSingleton.RegisteWebAPIHandler("/api/Match/DeleteMatchConfig", WebAPIHandlerWrapper( // func(tNode *transact.TransNode, params webapi.RequestBody) (int, webapi.ResponseBody) { // resp := webapi.NewResponseBody() // params_data, _ := params.GetRequestBody("Param") // platform, _ := params_data.GetStr("Platform") // matchId, _ := params_data.GetInt("MatchId") // // m := MatchMgrSington.GetMatch(int32(matchId)) // if m != nil { // if platform != "" && m.dbMatch.Platform != platform { // resp[webapi.RESPONSE_STATE] = webapi.STATE_ERR // resp[webapi.RESPONSE_ERRMSG] = "limits of authority!" // return common.ResponseTag_OpFailed, resp // } // } // // MatchMgrSington.DeleteMatch(int32(matchId)) // resp[webapi.RESPONSE_STATE] = webapi.STATE_OK // return common.ResponseTag_Ok, resp // })) // // //------------------------------------------------------------------------------------------------------- // //获取当前未开始的比赛 // WebAPIHandlerMgrSingleton.RegisteWebAPIHandler("/api/Match/QueryNotStartedMatch", WebAPIHandlerWrapper( // func(tNode *transact.TransNode, params webapi.RequestBody) (int, webapi.ResponseBody) { // resp := webapi.NewResponseBody() // params_data, _ := params.GetRequestBody("Param") // platform, _ := params_data.GetStr("Platform") // data := MatchMgrSington.MarshalAllNotStartedMatch(platform) // resp[webapi.RESPONSE_STATE] = webapi.STATE_OK // resp[webapi.RESPONSE_DATA] = data // return common.ResponseTag_Ok, resp // })) // // //------------------------------------------------------------------------------------------------------- // //强制解散正在进行中的比赛 // WebAPIHandlerMgrSingleton.RegisteWebAPIHandler("/api/Match/CancelSignupNotStartedMatch", WebAPIHandlerWrapper( // func(tNode *transact.TransNode, params webapi.RequestBody) (int, webapi.ResponseBody) { // resp := webapi.NewResponseBody() // params_data, _ := params.GetRequestBody("Param") // platform, _ := params_data.GetStr("Platform") // matchId, _ := params_data.GetInt("MatchId") // // m := MatchMgrSington.GetMatch(int32(matchId)) // if m != nil { // if platform != "" && m.dbMatch.Platform != platform { // resp[webapi.RESPONSE_STATE] = webapi.STATE_ERR // resp[webapi.RESPONSE_ERRMSG] = "limits of authority!" // return common.ResponseTag_OpFailed, resp // } // // m.ForceCancelSignupAll() // } // // resp[webapi.RESPONSE_STATE] = webapi.STATE_OK // return common.ResponseTag_Ok, resp // })) // // //------------------------------------------------------------------------------------------------------- // //获取当前正在进行中的比赛 // WebAPIHandlerMgrSingleton.RegisteWebAPIHandler("/api/Match/QueryRunningMatch", WebAPIHandlerWrapper( // func(tNode *transact.TransNode, params webapi.RequestBody) (int, webapi.ResponseBody) { // resp := webapi.NewResponseBody() // params_data, _ := params.GetRequestBody("Param") // platform, _ := params_data.GetStr("Platform") // data := MatchMgrSington.MarshalAllRunningMatch(platform) // resp[webapi.RESPONSE_STATE] = webapi.STATE_OK // resp[webapi.RESPONSE_DATA] = data // return common.ResponseTag_Ok, resp // })) // // //------------------------------------------------------------------------------------------------------- // //强制解散正在进行中的比赛 // WebAPIHandlerMgrSingleton.RegisteWebAPIHandler("/api/Match/DestroyRunningMatch", WebAPIHandlerWrapper( // func(tNode *transact.TransNode, params webapi.RequestBody) (int, webapi.ResponseBody) { // resp := webapi.NewResponseBody() // params_data, _ := params.GetRequestBody("Param") // platform, _ := params_data.GetStr("Platform") // matchId, _ := params_data.GetInt("MatchCopyId") // // m := MatchMgrSington.GetCopyMatch(int32(matchId)) // if m != nil { // if platform != "" && m.dbMatch.Platform != platform { // resp[webapi.RESPONSE_STATE] = webapi.STATE_ERR // resp[webapi.RESPONSE_ERRMSG] = "limits of authority!" // return common.ResponseTag_OpFailed, resp // } // // m.ForceDestroy() // } // // resp[webapi.RESPONSE_STATE] = webapi.STATE_OK // return common.ResponseTag_Ok, resp // })) // // //------------------------------------------------------------------------------------------------------- // //更新比赛券配置 // WebAPIHandlerMgrSingleton.RegisteWebAPIHandler("/api/act/UpdateTicketConfig", WebAPIHandlerWrapper( // func(tNode *transact.TransNode, params webapi.RequestBody) (int, webapi.ResponseBody) { // resp := webapi.NewResponseBody() // params_data, _ := params.GetRequestBody("Param") // if data, ok := params_data.GetRequestBody("Data"); ok { // buf, err := json.Marshal(data) // if err != nil { // resp[webapi.RESPONSE_STATE] = webapi.STATE_ERR // resp[webapi.RESPONSE_ERRMSG] = "params error!" // return common.ResponseTag_ParamError, resp // } // // var cfg ActTicketConfig // err = json.Unmarshal(buf, &cfg) // if err != nil { // resp[webapi.RESPONSE_STATE] = webapi.STATE_ERR // resp[webapi.RESPONSE_ERRMSG] = "params error!" // return common.ResponseTag_ParamError, resp // } // // ActTicketMgrSington.UpdateConfig(&cfg, false) // resp[webapi.RESPONSE_STATE] = webapi.STATE_OK // return common.ResponseTag_Ok, resp // } // // resp[webapi.RESPONSE_STATE] = webapi.STATE_ERR // resp[webapi.RESPONSE_ERRMSG] = "need Data!" // return common.ResponseTag_ParamError, resp // })) // // //------------------------------------------------------------------------------------------------------- // //钱包操作接口 // WebAPIHandlerMgrSingleton.RegisteWebAPIHandler("/api/Match/AddTicket", WebAPIHandlerWrapper( // func(tNode *transact.TransNode, params webapi.RequestBody) (int, webapi.ResponseBody) { // params_data, _ := params.GetRequestBody("Param") // resp := webapi.NewResponseBody() // // member_snid, _ := params_data.GetInt("ID") // count, _ := params_data.GetInt64("Ticket") // oper, _ := params_data.GetStr("Oper") // desc, _ := params_data.GetStr("Desc") // billNo, _ := params_data.GetInt("BillNo") // platform, _ := params_data.GetStr("Platform") // // if CacheDataMgr.CacheBillCheck(billNo) { // resp[webapi.RESPONSE_STATE] = webapi.STATE_ERR // resp[webapi.RESPONSE_ERRMSG] = "Bill number repeated!" // resp[webapi.RESPONSE_DATA] = make(map[string]interface{}) // return common.ResponseTag_ParamError, resp // } // CacheDataMgr.CacheBillNumber(billNo) //防止手抖点两下 // // var err error // var pd *model.PlayerData // oldTicket := int64(0) // var timeStamp = time.Now().UnixNano() // type PlayerTicketData struct { // ID int32 // Ticket int64 // } // player := PlayerMgrSington.GetPlayerBySnId(int32(member_snid)) // if player != nil { //在线玩家处理 // pd = player.PlayerData // if len(platform) > 0 && player.Platform != platform { // CacheDataMgr.ClearCacheBill(billNo) // resp[webapi.RESPONSE_STATE] = webapi.STATE_ERR // resp[webapi.RESPONSE_ERRMSG] = "player platform forbit!" // resp[webapi.RESPONSE_DATA] = make(map[string]interface{}) // return common.ResponseTag_ParamError, resp // } // // if count < 0 { // if player.Ticket+count < 0 { // CacheDataMgr.ClearCacheBill(billNo) // resp[webapi.RESPONSE_STATE] = webapi.STATE_ERR // resp[webapi.RESPONSE_ERRMSG] = "ticket not enough!" // resp[webapi.RESPONSE_DATA] = make(map[string]interface{}) // return common.ResponseTag_ParamError, resp // } // } // // gainWay := int32(common.GainWay_API_AddTicket) // // oldTicket = player.Ticket // ticketLog := model.NewPayCoinLog(int64(billNo), int32(member_snid), count, gainWay, // desc, model.PayCoinLogType_Ticket, 0) // timeStamp = ticketLog.TimeStamp // //增加日志记录 // log := model.NewTicketLogEx(int32(member_snid), count, oldTicket+count, player.Ver, gainWay, oper, desc, player.Platform, player.Channel, player.BeUnderAgentCode, player.PackageID, player.InviterId) // task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { // err = model.InsertPayCoinLogs(ticketLog) // if err != nil { // logger.Logger.Errorf("model.InsertPayCoinLogs err:%v log:%v", err, ticketLog) // return err // } // err = model.InsertTicketLogs(log) // if err != nil { // //回滚到对账日志 // model.RemovePayCoinLog(ticketLog.LogId) // logger.Logger.Errorf("model.InsertTicketLogs err:%v log:%v", err, ticketLog) // return err // } // return err // }), task.CompleteNotifyWrapper(func(data interface{}, t *task.Task) { // CacheDataMgr.ClearCacheBill(billNo) // if data != nil { // resp[webapi.RESPONSE_STATE] = webapi.STATE_ERR // resp[webapi.RESPONSE_ERRMSG] = data.(error).Error() // resp[webapi.RESPONSE_DATA] = make(map[string]interface{}) // } else { // player.Ticket += count // player.TicketTotal += count // player.SetTicketPayTs(timeStamp) // player.dirty = true // if player.scene == nil { //如果在大厅,那么同步下数据 // player.SendDiffData() // } // pcd := &PlayerTicketData{ // ID: int32(member_snid), // Ticket: player.Ticket, // } // resp[webapi.RESPONSE_STATE] = webapi.STATE_OK // resp[webapi.RESPONSE_ERRMSG] = "" // resp[webapi.RESPONSE_DATA] = pcd // } // dataResp := &common.M2GWebApiResponse{} // dataResp.Body, err = resp.Marshal() // tNode.TransRep.RetFiels = dataResp // tNode.Resume() // if err != nil { // logger.Logger.Error("AddTicket task marshal data error:", err) // } // }), "AddTicket").Start() // return common.ResponseTag_TransactYield, resp // } else { // op := OfflinePlayerMgrSington.GetPlayer(int32(member_snid)) // if op != nil { // if count < 0 { // if op.Ticket+count < 0 { // CacheDataMgr.ClearCacheBill(billNo) // resp[webapi.RESPONSE_STATE] = webapi.STATE_ERR // resp[webapi.RESPONSE_ERRMSG] = "ticket not enough!" // resp[webapi.RESPONSE_DATA] = make(map[string]interface{}) // return common.ResponseTag_ParamError, resp // } // } // } // task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { // pd = model.GetPlayerDataBySnId(int32(member_snid), true) // if pd == nil { // return errors.New("Player not find.") // } // if len(platform) > 0 && pd.Platform != platform { // return errors.New("player platform forbit.") // } // oldTicket = pd.Ticket // if count < 0 { // if oldTicket+count < 0 { // return errors.New("ticket not enough!") // } // } // // gainWay := int32(common.GainWay_API_AddTicket) // ticketLog := model.NewPayCoinLog(int64(billNo), int32(member_snid), count, gainWay, // desc, model.PayCoinLogType_Ticket, 0) // timeStamp = ticketLog.TimeStamp // err = model.InsertPayCoinLogs(ticketLog) // if err != nil { // logger.Logger.Errorf("model.InsertPayCoinLogs err:%v log:%v", err, ticketLog) // return err // } // //增加帐变记录 // //增加日志记录 // log := model.NewTicketLogEx(int32(member_snid), count, oldTicket+count, pd.Ver, gainWay, oper, desc, pd.Platform, pd.Channel, pd.BeUnderAgentCode, pd.PackageID, pd.InviterId) // err = model.InsertTicketLogs(log) // if err != nil { // //回滚到对账日志 // model.RemovePayCoinLog(ticketLog.LogId) // logger.Logger.Errorf("model.InsertTicketLogs err:%v log:%v", err, log) // return err // } // return err // }), task.CompleteNotifyWrapper(func(data interface{}, t *task.Task) { // CacheDataMgr.ClearCacheBill(billNo) // if data != nil { // resp[webapi.RESPONSE_STATE] = webapi.STATE_ERR // resp[webapi.RESPONSE_ERRMSG] = data.(error).Error() // resp[webapi.RESPONSE_DATA] = make(map[string]interface{}) // } else { // pcd := &PlayerTicketData{ // ID: int32(member_snid), // Ticket: pd.Ticket + count, // } // resp[webapi.RESPONSE_STATE] = webapi.STATE_OK // resp[webapi.RESPONSE_ERRMSG] = "" // resp[webapi.RESPONSE_DATA] = pcd // //更新线下缓存数据 // op := OfflinePlayerMgrSington.GetPlayer(int32(member_snid)) // if op != nil { // op.Ticket += count // op.TicketTotal += count // op.SetTicketPayTs(timeStamp) // } // } // // dataResp := &common.M2GWebApiResponse{} // dataResp.Body, err = resp.Marshal() // tNode.TransRep.RetFiels = dataResp // tNode.Resume() // if err != nil { // logger.Logger.Error("AddTicket task marshal data error:", err) // } // }), "AddTicket").Start() // return common.ResponseTag_TransactYield, resp // } // })) // // //------------------------------------------------------------------------------------------------------- // //更新比赛券配置 // WebAPIHandlerMgrSingleton.RegisteWebAPIHandler("/api/act/ManualDistTicket", WebAPIHandlerWrapper( // func(tNode *transact.TransNode, params webapi.RequestBody) (int, webapi.ResponseBody) { // resp := webapi.NewResponseBody() // params_data, _ := params.GetRequestBody("Param") // orderId, _ := params_data.GetStr("OrderId") // platform, _ := params_data.GetStr("Platform") // task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { // order, err := model.DistAwaitIssuedTicketOrder(orderId, platform) // if err != nil { // return err // } // title := i18n.Tr("cn", "ActTicketTitle") // content := i18n.Tr("cn", "ActTicketContent", order.SnId, order.MatchName, order.Rank, order.Count) // msg := model.NewMessage("", int32(0), order.InviterId, model.MSGTYPE_MATCH_TICKETREWARD, title, content, 0, // model.MSGSTATE_UNREAD, time.Now().Unix(), model.MSGATTACHSTATE_DEFAULT, "", nil, order.Platform) // msg.Ticket = order.Count // err = model.InsertMessage(msg) // if err != nil { // return err // } // return msg // }), task.CompleteNotifyWrapper(func(data interface{}, t *task.Task) { // if data != nil { // if msg, ok := data.(*model.Message); ok && msg != nil { // p := PlayerMgrSington.GetPlayerBySnId(msg.SnId) // if p != nil { // p.AddMessage(msg) // } // } // resp[webapi.RESPONSE_STATE] = webapi.STATE_OK // } else { // resp[webapi.RESPONSE_STATE] = webapi.STATE_ERR // } // dataResp := &common.M2GWebApiResponse{} // dataResp.Body, _ = resp.Marshal() // tNode.TransRep.RetFiels = dataResp // tNode.Resume() // }), "DistAwaitIssuedTicketOrder").Start() // return common.ResponseTag_TransactYield, resp // })) //}