Untitled
unknown
plain_text
a month ago
3.6 kB
2
Indexable
package controllers import ( "bytes" "crypto/rand" "crypto/tls" "encoding/json" "fmt" "io/ioutil" "math/big" "net/http" "time" "github.com/gofiber/fiber/v2" "github.com/ibibe/mines/models" "github.com/ibibe/mines/services.go" ) func generateRandomMines(totalPositions, mineCount int) []int { positions := make(map[int]bool) for len(positions) < mineCount { nBig, _ := rand.Int(rand.Reader, big.NewInt(int64(totalPositions))) pos := int(nBig.Int64()) if pos < totalPositions && !positions[pos] { positions[pos] = true } } result := make([]int, 0, len(positions)) for pos := range positions { result = append(result, pos) } return result } func generateGridResults(minePositions []int, totalPositions int) []string { results := make([]string, totalPositions) for i := range results { results[i] = "Closed" } for _, pos := range minePositions { results[pos] = "Mine" } return results } func PlayController(c *fiber.Ctx) error { var req models.PlayRequest if err := c.BodyParser(&req); err != nil { fmt.Println(err) return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "Invalid request"}) } if req.Action == "play" { //game logic here const totalPositions = 25 const mineCount = 5 gRx := models.GameRx{ ClientId: req.ClientId, RTP: services.GetGameRtp(services.StringToInt(req.ClientId)), PayoutMultiplier: req.Multiplier, RequestSalt: "", BetAmount: req.StakeAmount, } //generate mine positions minePositions := generateRandomMines(totalPositions, mineCount) results := generateGridResults(minePositions, totalPositions) // generate random number randomBig, _ := rand.Int(rand.Reader, big.NewInt(100)) randomValue := float64(randomBig.Int64()) / 100.0 targetRTP := gRx.RTP / 100.0 isWin := randomValue <= targetRTP payoutAmount := 0.0 if isWin { payoutAmount = req.StakeAmount * req.Multiplier } return c.JSON(models.GameResponse{ Payout: models.ResponsePayout{ Amount: payoutAmount, Currency: "USD", }, Nonce: int(time.Now().Unix()), PayoutFactor: req.Multiplier, Balance: models.ResponseBalance{ UpdatedOn: time.Now(), Amount: 1000.00, //replace with actual balance Currency: "USD", }, Id: req.BetId, Data: models.ResponseData{ Results: results, DataType: "game_results", Multiplier: req.Multiplier, }, }) } if req.Action == "cashout" { return c.JSON(models.GameResponse{ Stake: models.ResponseStake{ Amount: req.StakeAmount, Currency: "USD", }, Balance: models.ResponseBalance{ UpdatedOn: time.Now(), Amount: req.StakeAmount * req.Multiplier, Currency: "USD", }, Id: req.BetId, }) } return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "Invalid action"}) } func CommonPostReturn(postUrl string, postData interface{}) []byte { marshalJson, _ := json.Marshal(postData) req, err := http.NewRequest("POST", postUrl, bytes.NewBuffer(marshalJson)) req.Header.Set("X-Requested-With", "XMLHttpRequest") req.Header.Set("Content-Type", "application/json") tr := &http.Transport{ TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, } client := &http.Client{Transport: tr} resp, err := client.Do(req) if err != nil { panic(err) } defer resp.Body.Close() body, _ := ioutil.ReadAll(resp.Body) return body }
Editor is loading...
Leave a Comment