public List<Move> GetNextMoves(string gameId, List<string> existingIds) { Article game = new Article(Schemas.Game, gameId); var moveArticleIds = game.GetAllConnectedArticles(Relations.GameMove, null, null,new[] {"__id"}); var moveIds = moveArticleIds.Select(m => m.Id).ToList(); moveIds = moveIds.Except(existingIds).ToList(); List<Move> moves = new List<Move>(); if (moveIds.Count > 0) { var graphMoves = Graph.Project("get_next_moves", moveIds, null).Result; moves = graphMoves.Select(node => node.Article).ToList().ToModelMoves(); } return moves; }
public bool StartGame(string gameId, string userId, GameStatus status, bool isActive, List<string> tiles, List<string> gameTiles) { var game = new Article(Schemas.Game, gameId); var players = game.GetAllConnectedArticles(Relations.GamePlayer, null, null, new[] {"__id"}); if (players != null && players.Count == 1) { game.Set("status", status.ToString()); game.Set("tiles", string.Join(",", gameTiles)); var conn = Connection.New(Relations.GamePlayer) .FromExistingArticle("player", userId) .ToExistingArticle("game", gameId); conn.Set("ishost", false); conn.Set("isactive", isActive); conn.Set("tiles", string.Join("|", tiles)); conn.Set("tiles_remaining", AppConfigurations.MaxTilesPerPlayer); conn.SaveAsync().Wait(); game.SaveAsync().Wait(); return true; } return false; }