Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions src-java/peerbase/sample/pingpong/Message.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package peerbase.sample.pingpong;

public enum Message {
PING("PING"), PONG("PONG");

private String msg;

Message(String msg) {
this.msg = msg;
}

public String msg() {
return msg;
}
}
24 changes: 24 additions & 0 deletions src-java/peerbase/sample/pingpong/PingHandler.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package peerbase.sample.pingpong;

import peerbase.HandlerInterface;
import peerbase.LoggerUtil;
import peerbase.PeerConnection;
import peerbase.PeerMessage;

/**
* Sends a pong message to where sent a ping message
*/
public class PingHandler implements HandlerInterface {

@Override
public void handleMessage(PeerConnection conn, PeerMessage msg) {
String[] args = msg.getMsgData().split(" ");
String host = args[0];
int port = Integer.parseInt(args[1]);

System.out.println("Ping from " + host + ":" + port);

conn.sendData(new PeerMessage(Message.PONG.msg(), ""));
System.out.println("Sent a Pong to " + host + ":" + port);
}
}
69 changes: 69 additions & 0 deletions src-java/peerbase/sample/pingpong/PingPongApp.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
package peerbase.sample.pingpong;

import peerbase.LoggerUtil;
import peerbase.PeerInfo;

import java.util.Scanner;
import java.util.logging.Level;

public class PingPongApp {
private PingPongNode node;

public static void main(String[] args) {
new PingPongApp();
}

public PingPongApp() {
System.out.println("[ PingPongApp ]");
Scanner sc = new Scanner(System.in);

String cmd = "";
while (true) {
System.out.print("> ");
cmd = sc.nextLine();

if (cmd.startsWith("init")) {
init(cmd);
} else if (cmd.startsWith("ping")) {
ping(cmd);
} else if (cmd.equalsIgnoreCase("exit")) {
break;
} else {
System.out.println("Wrong command. Try ");
System.out.println("init <id> <host> <port>");
System.out.println("ping <host> <port>");
System.out.println("exit");
}
}

System.out.println("Bye");
}

private void init(String cmd) {
// remove cmd head
cmd = cmd.substring("init ".length());

// init <id> <host> <port>
String[] args = cmd.split(" ");
String id = args[0];
String host = args[1];
int port = Integer.parseInt(args[2]);

this.node = new PingPongNode(new PeerInfo(id, host, port));
new Thread(() -> node.mainLoop()).start();

System.out.println("Initialized successfully");
}

private void ping(String cmd) {
// remove cmd head
cmd = cmd.substring("ping ".length());

// ping <host> <port>
String[] args = cmd.split(" ");
String host = args[0];
int port = Integer.parseInt(args[1]);

this.node.ping(host, port);
}
}
40 changes: 40 additions & 0 deletions src-java/peerbase/sample/pingpong/PingPongNode.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package peerbase.sample.pingpong;

import peerbase.LoggerUtil;
import peerbase.Node;
import peerbase.PeerInfo;
import peerbase.PeerMessage;
import peerbase.util.SimpleRouter;

import java.util.List;

public class PingPongNode extends Node {
public PingPongNode(PeerInfo peerInfo) {
super(5, peerInfo);

// handlers
addHandler(Message.PING.msg(), new PingHandler());

// router
addRouter(new SimpleRouter(this));
}

public void ping(String host, int port) {
PeerInfo info = new PeerInfo(host, port);
List<PeerMessage> replies = connectAndSend(info, Message.PING.name(), getHost() + " " + getPort(), true);
System.out.println("Sent a ping to " + info);

if (replies.isEmpty()) {
System.out.println(info + " didn't reply to ping you sent");
return;
}

PeerMessage reply = replies.get(0);
if (reply.getMsgType().equals(Message.PONG.msg())) {
System.out.println("Pong is arrived from " + info);
}
}
}