public static PartyModel FromStorageParty(PartyStorageModel input) { var players = input.Players.ConvertAll(x => FromStoragePlayer(x)); return(new PartyModel { Name = input.Name, SpectatorCode = input.SpectatorCode, Players = players }); }
public async Task CreateParty(PartyStorageModel party) { await _parties.InsertOneAsync(party); }
public async Task JoinParty(string partyName, string spectatorCode, string playerObj) { // if spectatorCode is empty, fetch it if (string.IsNullOrEmpty(spectatorCode)) { spectatorCode = SpectatorHelper.ToSpectatorCode(partyName, _key); } // if partyname is empty, fetch it else if (string.IsNullOrEmpty(partyName)) { partyName = SpectatorHelper.ToPartyName(spectatorCode, _key); } var player = CompressionHelper.Decompress <PlayerModel>(playerObj); player.ConnectionID = Context.ConnectionId; var update = await _mongoRepository.UpdatePartyNameInConnectionIndex(ConnectionId, partyName); if (update == null) { await AddToIndex(partyName); } var storageParty = await _mongoRepository.GetParty(partyName); if (storageParty == null) { if (player.IsSpectator) { await Clients.Caller.SendAsync("GroupNotFoundOrEmpty"); } else { player.IsLeader = true; storageParty = new PartyStorageModel() { Name = partyName, Players = new List <PlayerStorageModel> { StorageHelper.ToStoragePlayer(player) }, SpectatorCode = spectatorCode }; await _mongoRepository.CreateParty(storageParty); storageParty.Name = ""; var party = StorageHelper.FromStorageParty(storageParty); await Clients.Caller.SendAsync("EnteredParty", CompressionHelper.Compress(party), CompressionHelper.Compress(player)); } } else { if (player.IsSpectator && !storageParty.Players.Any(x => !x.IsSpectator)) { await Clients.Caller.SendAsync("GroupNotFoundOrEmpty"); } else { var oldPlayer = storageParty.Players.FirstOrDefault(x => (x.ConnectionID == player.ConnectionID || (x.Character != null && player.Character != null && x.Character.Name == player.Character.Name))); // if the party were joining doesnt have a leader, make the player leader if (!storageParty.Players.Any(x => x.IsLeader)) { player.IsLeader = true; } var storagePlayer = StorageHelper.ToStoragePlayer(player); if (oldPlayer == null) { await _mongoRepository.AddPlayerToParty(partyName, storagePlayer); } else { await _mongoRepository.UpdatePlayerInParty(partyName, storagePlayer); } storageParty = await _mongoRepository.GetParty(partyName); storageParty.Name = ""; var party = StorageHelper.FromStorageParty(storageParty); await Clients.Caller.SendAsync("EnteredParty", CompressionHelper.Compress(party), CompressionHelper.Compress(player)); } } await Groups.AddToGroupAsync(Context.ConnectionId, partyName); await Clients.OthersInGroup(partyName).SendAsync("PlayerJoined", CompressionHelper.Compress(player)); if (!player.IsSpectator) { await Clients.Group(partyName).SendAsync("PlayerUpdated", CompressionHelper.Compress(player)); } }