// 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 } }
// Joins gamelog syncgroup func JoinLogSyncgroup(logName string, creator bool, u *uistate.UIState) bool { fmt.Println("Joining gamelog syncgroup") u.IsOwner = creator app := u.Service.App(util.AppName) db := app.Database(util.DbName, nil) logSg := db.Syncgroup(logName) myInfoJoiner := wire.SyncgroupMemberInfo{8, creator} _, err := logSg.Join(u.Ctx, myInfoJoiner) if err != nil { fmt.Println("SYNCGROUP JOIN ERROR: ", err) return false } else { fmt.Println("Syncgroup joined") if u.LogSG != logName { ResetGame(logName, creator, u) } return true } }
func endClickArrange(t touch.Event, u *uistate.UIState) { pressed := unpressButtons(u) for _, b := range pressed { if b == u.Buttons["exit"] { if u.SGChan != nil { u.SGChan <- true u.SGChan = nil } u.IsOwner = false u.DiscGroups = make(map[string]*uistate.DiscStruct) u.ScanChan = make(chan bool) go sync.ScanForSG(u.Ctx, u.ScanChan, u) view.LoadDiscoveryView(u) } else if b == u.Buttons["start"] { if u.CurTable.AllReadyForNewRound() { successStart := sync.LogGameStart(u) for !successStart { successStart = sync.LogGameStart(u) } newHands := u.CurTable.Deal() successDeal := sync.LogDeal(u, u.CurPlayerIndex, newHands) for !successDeal { successDeal = sync.LogDeal(u, u.CurPlayerIndex, newHands) } } } else { for key, button := range u.Buttons { if b == button && (u.CurPlayerIndex < 0 || u.Debug) { if key == "joinTable" { u.CurPlayerIndex = 4 sync.LogPlayerNum(u) } else { playerNum := strings.Split(key, "-")[1] u.CurPlayerIndex, _ = strconv.Atoi(playerNum) sync.LogPlayerNum(u) } } } } } }