ensure uniqueness of daily seed

This commit is contained in:
Up 2024-05-08 12:58:11 +02:00
parent 3a5f6fb116
commit b803dff3e9
No known key found for this signature in database
GPG Key ID: 3B75CD7439FEB388
3 changed files with 50 additions and 17 deletions

View File

@ -61,22 +61,27 @@ func Init() error {
secret = newSecret secret = newSecret
} }
err = recordNewDaily() seed, err := recordNewDaily()
if err != nil { if err != nil {
log.Print(err) log.Print(err)
} }
log.Printf("Daily Run Seed: %s", Seed()) log.Printf("Daily Run Seed: %s", seed)
scheduler.AddFunc("@daily", func() { _, err = scheduler.AddFunc("@daily", func() {
time.Sleep(time.Second) time.Sleep(time.Second)
err := recordNewDaily() seed, err = recordNewDaily()
log.Printf("Daily Run Seed: %s", seed)
if err != nil { if err != nil {
log.Printf("error while recording new daily: %s", err) log.Printf("error while recording new daily: %s", err)
} }
}) })
if err != nil {
return err
}
scheduler.Start() scheduler.Start()
return nil return nil
@ -95,11 +100,6 @@ func deriveSeed(seedTime time.Time) []byte {
return hashedSeed[:] return hashedSeed[:]
} }
func recordNewDaily() error { func recordNewDaily() (string, error) {
err := db.TryAddDailyRun(Seed()) return db.TryAddDailyRun(Seed())
if err != nil {
return err
}
return nil
} }

View File

@ -18,6 +18,7 @@
package api package api
import ( import (
"encoding/base64"
"encoding/json" "encoding/json"
"fmt" "fmt"
"net/http" "net/http"
@ -302,7 +303,13 @@ func handleSaveData(w http.ResponseWriter, r *http.Request) {
} }
// doesn't return a save, but it works // doesn't return a save, but it works
save, err = savedata.Clear(uuid, slot, daily.Seed(), s) var seed string
seed, err = db.GetDailyRunSeed()
if err != nil {
httpError(w, r, err, http.StatusInternalServerError)
return
}
save, err = savedata.Clear(uuid, slot, seed, s)
} }
if err != nil { if err != nil {
httpError(w, r, err, http.StatusInternalServerError) httpError(w, r, err, http.StatusInternalServerError)
@ -326,7 +333,21 @@ func handleSaveData(w http.ResponseWriter, r *http.Request) {
// daily // daily
func handleDailySeed(w http.ResponseWriter, r *http.Request) { func handleDailySeed(w http.ResponseWriter, r *http.Request) {
w.Write([]byte(daily.Seed())) seed, err := db.GetDailyRunSeed()
if err != nil {
httpError(w, r, err, http.StatusInternalServerError)
return
}
bytes, err := base64.StdEncoding.DecodeString(seed)
if err != nil {
httpError(w, r, err, http.StatusInternalServerError)
return
}
_, err = w.Write(bytes)
if err != nil {
httpError(w, r, err, http.StatusInternalServerError)
return
}
} }
func handleDailyRankings(w http.ResponseWriter, r *http.Request) { func handleDailyRankings(w http.ResponseWriter, r *http.Request) {

View File

@ -23,13 +23,25 @@ import (
"github.com/pagefaultgames/rogueserver/defs" "github.com/pagefaultgames/rogueserver/defs"
) )
func TryAddDailyRun(seed string) error { func TryAddDailyRun(seed string) (string, error) {
_, err := handle.Exec("INSERT INTO dailyRuns (seed, date) VALUES (?, UTC_DATE()) ON DUPLICATE KEY UPDATE date = date", seed) var actualSeed string
err := handle.QueryRow("INSERT INTO dailyRuns (seed, date) VALUES (?, UTC_DATE()) ON DUPLICATE KEY UPDATE date = date RETURNING seed", seed).Scan(&actualSeed)
if err != nil { if err != nil {
return err return "INVALID", err
} }
return nil return actualSeed, nil
}
func GetDailyRunSeed() (string, error) {
var seed string
err := handle.QueryRow("SELECT seed FROM dailyRuns WHERE date = UTC_DATE()").Scan(&seed)
if err != nil {
return "INVALID", err
}
return seed, nil
} }
func AddOrUpdateAccountDailyRun(uuid []byte, score int, wave int) error { func AddOrUpdateAccountDailyRun(uuid []byte, score int, wave int) error {