public void SendAllMessages() { foreach (KeyValuePair <Tuple <int, ushort>, List <byte[]> > pair in messages) { int matchId = pair.Key.Item1; ushort playerId = pair.Key.Item2; List <byte[]> serializedMessages = pair.Value; if (!ipAddressesStorage.TryGetIpEndPoint(matchId, playerId, out var ip)) { log.Debug($"Ip игрока {nameof(matchId)} {matchId} {nameof(playerId)} {playerId} нет."); return; } simpleMessagesPacker.Send(matchId, playerId, ip, serializedMessages); } messages.Clear(); }
public void SendAll() { List <(int matchId, ushort playerId)> pairs = new List <(int matchId, ushort playerId)>(); //получить пары matchId playerId из хранилища матчей foreach (Match match in matchStorage.GetAllMatches()) { int matchId = match.matchId; List <ushort> players = ipAddressesStorage.GetActivePlayersIds(matchId); if (players != null) { foreach (ushort playersId in players) { pairs.Add((matchId, playersId)); } } } //запросить и отправить сообщения для всех пар foreach (var(matchId, playerId) in pairs) { //messageId, model byte[][] messagesForPlayer = byteArrayRudpStorage.GetMessages(matchId, playerId); if (messagesForPlayer != null) { if (ipAddressesStorage.TryGetIpEndPoint(matchId, playerId, out IPEndPoint ipEndPoint)) { foreach (byte[] data in messagesForPlayer) { udpSendUtils.SendReadyMadeMessage(matchId, playerId, data); } } else { //такого быть не должно. ведь id игрока был получен из списка активных игроков log.Error("ip игрока не найден, хотя он в списке активных игроков."); } } } }