Ich habe Klassen Source, Intermediate und Destination. Die Quellklasse hat eine Methode, die mit einiger Wahrscheinlichkeit neue zu sendende Pakete empfängt. Wann immer ein Paket empfangen wird, sollte es an alle benachbarten Zwischenknoten gesendet werden (simuliert durch eine setPacket-Methode). Zwischenknoten sollten diese Pakete an ihre Nachbarn senden, bis Pakete ihr Ziel erreichen. Das Problem liegt immer dann vor, wenn die Kette der Paketübertragung gestartet wird. Der Quellknoten beendet die Ausführung seiner Methode zum Abrufen neuer Pakete. Im Grunde ist die Quellklasse eingefroren, während die Funktionskette funktioniert. Gibt es eine Möglichkeit, diese beiden Prozesse gleichzeitig auszuführen? (Es ist wie Source-Knoten Anfrage an Zwischenklasse senden und dass man es tun wird, arbeitet unabhängig) Ich habe versucht, für jede der drei Klassen Thread-Klasse zu erweitern, aber immer noch Getriebe-Kette ist einfrieren Source-Klasse. Die verwendete Sprache ist Java, aber wenn es eine andere Sprache gibt, die den Job erledigen kann, kann ich zu ihnen wechseln.So simulieren Sie Ad-hoc-Netzwerkknoten?
public class Main {
public static void main(String[] args) {
// init nodes
SourceNode sourceNode = new SourceNode();
IntermediateNode intermediateNode1 = new IntermediateNode();
IntermediateNode intermediateNode2 = new IntermediateNode();
IntermediateNode intermediateNode3 = new IntermediateNode();
DestinationNode destinationNode = new DestinationNode();
// create network topology, S - I - I - I - D
sourceNode.setNextNode(intermediateNode1);
intermediateNode1.setNextNode(intermediateNode2);
intermediateNode2.setNextNode(intermediateNode3);
intermediateNode3.setNextNode(destinationNode);
// setup listeners
sourceNode.setSetupMessageListener(intermediateNode1);
intermediateNode1.setSetupMessageListener(intermediateNode2);
intermediateNode2.setSetupMessageListener(intermediateNode3);
intermediateNode3.setSetupMessageListener(destinationNode);
sourceNode.run();
}
}
public interface SetupMessageListener {
void onNewSetupMessage();
}
public class Node {
protected SetupMessageListener setupMessageListener;
protected Node nextNode;
public void setNextNode(Node nextNode) {
this.nextNode = nextNode;
}
public void setSetupMessageListener(SetupMessageListener setupMessageListener) {
this.setupMessageListener = setupMessageListener;
}
}
import java.util.Random;
public class SourceNode extends Node implements Runnable {
@Override
public void run() {
while(true) {
// simulate generating new setup message with probability 1/10
Random random = new Random();
int rv = random.nextInt(10);
if (rv == 0) {
createNewSetupMessage();
}
}
}
public void createNewSetupMessage() {
System.out.println("New setup message was created in Source Node");
if (setupMessageListener != null) {
setupMessageListener.onNewSetupMessage();
}
}
}
public class IntermediateNode extends Node implements SetupMessageListener {
public static int count = 0;
private int id;
public IntermediateNode() {
id = count++;
}
@Override
public void onNewSetupMessage() {
System.out.println("Intermediate Node " + id + " got notified about setup message");
// pass setup message to next neighbor
setupMessageListener.onNewSetupMessage();
}
}
public class DestinationNode extends Node implements SetupMessageListener {
@Override
public void onNewSetupMessage() {
System.out.println("Destination Node got notified about new setup message");
}
}
Und das Beispiel Ausgang ist
New setup message was created in Source Node
Intermediate Node 0 got notified about setup message
Intermediate Node 1 got notified about setup message
Intermediate Node 2 got notified about setup message
Destination Node got notified about new setup message
New setup message was created in Source Node
Intermediate Node 0 got notified about setup message
Allerdings habe ich es smth wie
New setup message was created in Source Node
Intermediate Node 0 got notified about setup message
New setup message was created in Source Node
Intermediate Node 1 got notified about setup message
Intermediate Node 0 got notified about setup message
Intermediate Node 2 got notified about setup message
Destination Node got notified about new setup message
Ohne Ihren Code zu sehen, ist es unmöglich festzustellen, was falsch ist. –
Hinzugefügt Code und Beispielausgabe –