From 22cd7b50bcc95102c64cd4d7d9c0337cc43f3397 Mon Sep 17 00:00:00 2001 From: hiimanget <124326156+hiimanget@users.noreply.github.com> Date: Fri, 3 Feb 2023 11:23:34 +0900 Subject: [PATCH] Added pingpong sample app --- .../sample/{ => fileshare}/FileShareApp.java | 0 .../sample/{ => fileshare}/FileShareNode.java | 0 .../peerbase/sample/pingpong/Message.java | 15 ++++ .../peerbase/sample/pingpong/PingHandler.java | 24 +++++++ .../peerbase/sample/pingpong/PingPongApp.java | 69 +++++++++++++++++++ .../sample/pingpong/PingPongNode.java | 40 +++++++++++ 6 files changed, 148 insertions(+) rename src-java/peerbase/sample/{ => fileshare}/FileShareApp.java (100%) rename src-java/peerbase/sample/{ => fileshare}/FileShareNode.java (100%) create mode 100644 src-java/peerbase/sample/pingpong/Message.java create mode 100644 src-java/peerbase/sample/pingpong/PingHandler.java create mode 100644 src-java/peerbase/sample/pingpong/PingPongApp.java create mode 100644 src-java/peerbase/sample/pingpong/PingPongNode.java diff --git a/src-java/peerbase/sample/FileShareApp.java b/src-java/peerbase/sample/fileshare/FileShareApp.java similarity index 100% rename from src-java/peerbase/sample/FileShareApp.java rename to src-java/peerbase/sample/fileshare/FileShareApp.java diff --git a/src-java/peerbase/sample/FileShareNode.java b/src-java/peerbase/sample/fileshare/FileShareNode.java similarity index 100% rename from src-java/peerbase/sample/FileShareNode.java rename to src-java/peerbase/sample/fileshare/FileShareNode.java diff --git a/src-java/peerbase/sample/pingpong/Message.java b/src-java/peerbase/sample/pingpong/Message.java new file mode 100644 index 0000000..5ec06f9 --- /dev/null +++ b/src-java/peerbase/sample/pingpong/Message.java @@ -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; + } +} diff --git a/src-java/peerbase/sample/pingpong/PingHandler.java b/src-java/peerbase/sample/pingpong/PingHandler.java new file mode 100644 index 0000000..62624d2 --- /dev/null +++ b/src-java/peerbase/sample/pingpong/PingHandler.java @@ -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); + } +} diff --git a/src-java/peerbase/sample/pingpong/PingPongApp.java b/src-java/peerbase/sample/pingpong/PingPongApp.java new file mode 100644 index 0000000..8c085c3 --- /dev/null +++ b/src-java/peerbase/sample/pingpong/PingPongApp.java @@ -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 "); + System.out.println("ping "); + System.out.println("exit"); + } + } + + System.out.println("Bye"); + } + + private void init(String cmd) { + // remove cmd head + cmd = cmd.substring("init ".length()); + + // init + 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 + String[] args = cmd.split(" "); + String host = args[0]; + int port = Integer.parseInt(args[1]); + + this.node.ping(host, port); + } +} diff --git a/src-java/peerbase/sample/pingpong/PingPongNode.java b/src-java/peerbase/sample/pingpong/PingPongNode.java new file mode 100644 index 0000000..cdf9499 --- /dev/null +++ b/src-java/peerbase/sample/pingpong/PingPongNode.java @@ -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 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); + } + } +} + + +