public static void Classify(UdpSocket udpSocket, ICollection <Receiver> receivers, List <ConfirmPacketInfo> confirmPacketInfos, Dictionary <int, SenderPacketInfo> senderPacketInfos) { foreach (var receiver in receivers) { senderPacketInfos.Add(receiver.SenderId, new SenderPacketInfo()); } while (true) { var packet = udpSocket.Receive(); if (packet == null) { break; } int senderId = PacketUtils.getSessionIdFromSenderPacketBytes(packet.Bytes); var packetType = PacketUtils.getPacketTypeFromSenderPacketBytes(packet.Bytes); if (packetType == SenderPacketType.Confirm) { confirmPacketInfos.Add(new ConfirmPacketInfo(packet.EndPoint, ConfirmSenderPacket.Create(packet.Bytes))); continue; } // Ignore packet if it is sent from a sender without a corresponding receiver. if (!senderPacketInfos.TryGetValue(senderId, out SenderPacketInfo senderPacketInfo)) { continue; } senderPacketInfo.ReceivedAny = true; switch (packetType) { case SenderPacketType.Heartbeat: break; case SenderPacketType.Video: senderPacketInfo.VideoPackets.Add(VideoSenderPacket.Create(packet.Bytes)); break; case SenderPacketType.Parity: senderPacketInfo.ParityPackets.Add(ParitySenderPacket.Create(packet.Bytes)); break; case SenderPacketType.Audio: senderPacketInfo.AudioPackets.Add(AudioSenderPacket.Create(packet.Bytes)); break; } } }
public ConfirmPacketInfo(IPEndPoint senderEndPoint, ConfirmSenderPacket confirmPacket) { SenderEndPoint = senderEndPoint; ConfirmPacket = confirmPacket; }