// Creates a new gamelog syncgroup func CreateLogSyncgroup(u *uistate.UIState) (string, string) { fmt.Println("Creating Log Syncgroup") u.IsOwner = true // Generate random gameID information to advertise this game gameID := rand.Intn(1000000) u.GameID = gameID gameMap := make(map[string]interface{}) gameMap["type"] = "Hearts" gameMap["playerNumber"] = 0 gameMap["gameID"] = gameID gameMap["ownerID"] = util.UserID value, err := json.Marshal(gameMap) if err != nil { fmt.Println("WE HAVE A HUGE PROBLEM:", err) } // Create gamelog syncgroup logSGName := fmt.Sprintf("%s/croupier/%s/%%%%sync/gaming-%d", util.MountPoint, util.SBName, gameID) allAccess := access.AccessList{In: []security.BlessingPattern{"..."}} permissions := access.Permissions{ "Admin": allAccess, "Write": allAccess, "Read": allAccess, "Resolve": allAccess, "Debug": allAccess, } logPref := wire.TableRow{util.LogName, fmt.Sprintf("%d", u.GameID)} logPrefs := []wire.TableRow{logPref} tables := []string{util.MountPoint + "/croupier"} logSpec := wire.SyncgroupSpec{ Description: "croupier syncgroup", Perms: permissions, Prefixes: logPrefs, MountTables: tables, IsPrivate: false, } myInfoCreator := wire.SyncgroupMemberInfo{8, true} app := u.Service.App(util.AppName) db := app.Database(util.DbName, nil) logSG := db.Syncgroup(logSGName) err = logSG.Create(u.Ctx, logSpec, myInfoCreator) if err != nil { fmt.Println("SYNCGROUP CREATE ERROR: ", err) fmt.Println("JOINING INSTEAD...") _, err2 := logSG.Join(u.Ctx, myInfoCreator) if err2 != nil { fmt.Println("SYNCGROUP JOIN ERROR: ", err2) return string(value), "" } else { return string(value), logSGName } } else { fmt.Println("Syncgroup created") if logSGName != u.LogSG { ResetGame(logSGName, true, u) } return string(value), logSGName } }
func ResetGame(logName string, creator bool, u *uistate.UIState) { u.M.Lock() defer u.M.Unlock() go sendTrueIfExists(u.GameChan) u.PlayerData = make(map[int]int) u.CurPlayerIndex = -1 u.LogSG = logName writeLogAddr(logName, creator) u.CurTable.NewGame() tmp := strings.Split(logName, "-") gameID, _ := strconv.Atoi(tmp[len(tmp)-1]) u.GameID = gameID u.GameChan = make(chan bool) go UpdateGame(u.GameChan, u) }