public async Task <List <RedisUserModel> > GetPlayersInGame() { List <RedisUserModel> players = new List <RedisUserModel>(); RedisValue[] playerIds = await RedisConnector.Redis.SetMembersAsync(GameRoomPlayerListKey()); foreach (var playerId in playerIds) { players.Add(await RedisUserModel.GetUserFromGuid(playerId)); } return(players); }
public async Task <Boolean> CreateInDatabase() { HashEntry[] roomRecord = { new HashEntry(RoomModel.RoomId, RoomModel.ToByteArray()), }; await RedisConnector.Redis.HashSetAsync(GameRoomsHashKey(), roomRecord); if (RoomModel.RoomStatus == RoomStatus.Open) { await RedisConnector.Redis.SetAddAsync(OpenLobbiesKey(), RoomModel.RoomId); } // Add the creator as a player in the game await JoinRoom(await RedisUserModel.GetUserFromGuid(RoomModel.CreatorId)); return(true); }
public async Task <Room> asRoom() { // TODO: If the room is anonymous, hide the creator and player ids. Room room = new Room() { RoomId = RoomModel.RoomId, RoomStatus = RoomModel.RoomStatus, Creator = (await RedisUserModel.GetUserFromGuid(RoomModel.CreatorId)).asUser(), RankedInformation = RoomModel.RankedInformation, Anonymous = RoomModel.Anonymous, RoomName = RoomModel.RoomName, Goal = RoomModel.Goal, Seed = RoomModel.Seed, UnixTimeCreated = RoomModel.UnixTimeCreated, UnixTimeStarted = RoomModel.UnixTimeStarted, MaxPlayers = RoomModel.MaxPlayers, MinutesPerTick = RoomModel.MinutesPerTick, }; List <RedisUserModel> playersInGame = await GetPlayersInGame(); room.Players.AddRange(playersInGame.ConvertAll(it => it.asUser())); room.AllowedSpecialists.AddRange(RoomModel.AllowedSpecialists); return(room); }
public async Task <CreateMessageGroupResponse> CreateMessageGroup(List <String> groupMembers) { // Sort member list by id groupMembers.Sort((a, b) => String.Compare(a, b, StringComparison.Ordinal)); // Get group hash string hash = ""; foreach (var userId in groupMembers) { RedisUserModel user = await RedisUserModel.GetUserFromGuid(userId); if (user == null) { return new CreateMessageGroupResponse() { Status = ResponseFactory.createResponse(ResponseType.PLAYER_DOES_NOT_EXIST), } } ; // Ensure the user is in the game room. if (await IsPlayerInRoom(user)) { hash += user.UserModel.Username; } else { return(new CreateMessageGroupResponse() { Status = ResponseFactory.createResponse(ResponseType.PERMISSION_DENIED), }); } } // Determine if the Id exists. if (await RedisConnector.Redis.HashExistsAsync(GameRoomChatListKey(), hash)) { return(new CreateMessageGroupResponse() { Status = ResponseFactory.createResponse(ResponseType.DUPLICATE), });; } // Create the group GroupModel newGroup = new GroupModel(); newGroup.GroupId = hash; foreach (string s in groupMembers) { RedisUserModel model = await RedisUserModel.GetUserFromGuid(s); if (model != null) { newGroup.GroupMembers.Add(model.asUser()); } } await RedisConnector.Redis.HashSetAsync(GameRoomChatListKey(), hash, newGroup.ToByteArray()); return(new CreateMessageGroupResponse() { GroupId = hash, Status = ResponseFactory.createResponse(ResponseType.SUCCESS), }); }