1
2
3
4
5
6
7
8 package org.sourceforge.jvb3d.Network;
9
10 import java.util.Observable;
11 import java.util.Queue;
12 import java.util.LinkedList;
13 import java.util.NoSuchElementException;
14
15 /***
16 * @author Łukasz Krzyżak
17 *
18 * Klasa pośredniczy pomiędzy NetworkReceiverem, a obiektemi które chcą wiedziec o
19 * nadchodzących pakietach
20 */
21 public class ReceivedPacketBuffer extends Observable {
22 private Queue<Packet> packetQueue = new LinkedList<Packet>();
23 private int count = 0;
24
25 /***
26 * Dodaje pakiet do kolejki, zwiększa ilość pakietów i ustawia flagę changed
27 * @param packet pakiet do dodania
28 */
29 void addPacket(Packet packet) {
30 count++;
31 packetQueue.add(packet);
32 this.setChanged();
33 }
34
35 /***
36 * zwraca ilość pakietów w buforze
37 * @return ilość pakietów w buforze
38 */
39 int getPacketCount() {
40 return count;
41 }
42
43 /***
44 * zwraca pakiet z bufora, i zmniejsza ilość elementów
45 * @return pakiet z kolejki
46 * @throws NoSuchElementException rzucany, jeśli nie było żadnego pakietu w kolejce
47 */
48 Packet getNextPacket() throws NoSuchElementException {
49 count--;
50 return packetQueue.remove();
51 }
52
53 /***
54 * "podgląda" pakiet na początku kolejki - zwraca go nie usuwając
55 * @return pierwszy pakiet z kolejki
56 * @throws NoSuchElementException rzucany, jesli nie ma żadnego elementu w kolejce
57 */
58 Packet peekNextPacket() throws NoSuchElementException {
59 return packetQueue.peek();
60 }
61 }