diff --git a/src/client/Client.java b/src/client/Client.java index 6a41efdb31f851be05d61e811eca05df86cc039e..e2e755df15f7af6c9c0b7125fa3c16766ccd06ea 100644 --- a/src/client/Client.java +++ b/src/client/Client.java @@ -17,6 +17,9 @@ import java.net.SocketException; import java.net.UnknownHostException; import java.util.Random; +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; /** * * @author LUCKY @@ -28,9 +31,13 @@ public class Client { private final int timeout=15000; //in milliseconds private boolean isProposer; private String ipAddress; //ipsendiri + private String serverAddress; private Random random; private int previouskpu; private Socket clientSocket; + private boolean tempc2s; + private boolean tempc2c; + public Client(int _playerid, int _port){ playerID = _playerid; @@ -39,6 +46,9 @@ public class Client { isProposer = false; random = new Random(); previouskpu = -1; + tempc2s = true; + tempc2c = true; + serverAddress = "localhost"; } public void setIsProposer(boolean _bool){ isProposer = _bool; @@ -67,20 +77,124 @@ public class Client { receiverSocket.receive(receivePacket); String response = new String(receivePacket.getData()); System.out.println("RESPONSE:" + response); - receiverSocket.close(); + //receiverSocket.close(); } - void connectToServer(String _ipAddr, int _port ) throws IOException{ - clientSocket = new Socket(_ipAddr, _port); - } - void sendMessageToServer(String in) throws IOException{ - DataOutputStream out = new DataOutputStream(clientSocket.getOutputStream()); - out.writeBytes(in+'\n'); + + public void peerAsClient() throws UnknownHostException, SocketException, IOException{ + byte[] sendData = new byte[1024]; + byte[] receiveData = new byte[1024]; + String input,sentence=""; + while(true){ + BufferedReader inFromUser =new BufferedReader(new InputStreamReader(System.in)); + DatagramSocket clientSocket = new DatagramSocket(); + InetAddress IPAddress = InetAddress.getByName("localhost"); + peermenu(); + input = inFromUser.readLine(); + switch(input){ + case "1" : sentence = "{\"method\": \"prepare_proposal\",\"proposal_id\": ["+proposalNum+","+playerID+"] }"; break; + case "2" : sentence = "{\"method\": \"accept_proposal\",\"proposal_id\": ["+proposalNum+","+playerID+"], \"kpu_id\" : 0 }";break; + case "3" : sentence = "{\"method\": \"vote_werewolf\",\"player_id\": 2 }";break; + case "4" : sentence = "{\"method\": \"vote_civilian\",\"player_id\": 2 }";break; + default : sentence ="";break; + } + sendData = sentence.getBytes(); + DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, port); + clientSocket.send(sendPacket); + if (sentence != ""){ + DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); + clientSocket.receive(receivePacket); + String modifiedSentence = new String(receivePacket.getData()); + System.out.println("FROM SERVER:" + modifiedSentence); + } + + clientSocket.close(); + } } - public void receiveMessageFromServer() throws IOException, ClassNotFoundException{ - BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); + void peermenu(){ + System.out.println("1.prepare proposal"); + System.out.println("2.accept proposal"); + System.out.println("3.vote werewolf"); + System.out.println("4.vote_civillian"); + } - + public void peerAsServer() throws SocketException, IOException{ + DatagramSocket serverSocket = new DatagramSocket(port); + String response,method; + while(tempc2c) + { + byte[] receiveData = new byte[1024]; + byte[] sendData = new byte[1024]; + DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); + serverSocket.receive(receivePacket); + String request = new String( receivePacket.getData()); + System.out.println("RECEIVED: " + request); + InetAddress IPAddress = receivePacket.getAddress(); + int port = receivePacket.getPort(); + if (isJSON(request)){ + JSONObject j = new JSONObject(request); + method = j.get("method").toString(); + switch(method){ + case "prepare_proposal" : response = "{\"status\": \"ok\",\"description\":\"accepted\", \"previous_accepted\" : "+previouskpu+"}";break; + case "accept_proposal" : response = "{\"status\": \"ok\",\"description\":\"accepted\"}";break; + case "vote_werewolf" : response = "{\"status\": \"ok\",\"description\":\"Vote Accepted\"}";break; + case "vote_civilian": response ="{\"status\": \"ok\",\"description\":\"Vote Accepted\"}";break; + default: response = ""; break; + } + sendData = response.getBytes(); + DatagramPacket sendPacket =new DatagramPacket(sendData, sendData.length, IPAddress, port); + + }else{ + tempc2c=false; + } + + } + } + public void client2server() throws IOException{ + String message="",response="",input; + while(tempc2s){ + client2servermenu(); + BufferedReader inFromUser = new BufferedReader( new InputStreamReader(System.in)); + clientSocket = new Socket(serverAddress, port); + DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream()); + BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); + input = inFromUser.readLine(); + switch(input){ + case "1" : message = "{\"method\": \"join\",\"username\": \"sister\",\"udp_address\": \"192.168.1.3\",\"udp_port\": 9999}";break; + case "2" : message = "{\"method\": \"leave\"}";break; + case "3" : message = "{\"method\": \"ready\"}";break; + case "4" : message = "{\"method\": \"client_address\"}";break; + case "5" : message = "{\"method\": \"vote_result_civilian\",\"vote_status\": 1,\"player_killed\": 4,\"vote_result\": [[0, 1], [1, 2]]}";break; + default : message = "hua";tempc2s = false;break; + } + outToServer.writeBytes(message + '\n'); + if (message == "hua"){} + else{ + response = inFromServer.readLine(); + System.out.println("response: " + response); + } + clientSocket.close(); + } + } + private boolean isJSON(String test){ + try{ + new JSONObject(test); + }catch(JSONException ex){ + try{ + new JSONArray(test); + }catch(JSONException ex2){ + return false; + } + } + return true; + } + public void client2servermenu(){ + System.out.println("1.join"); + System.out.println("2.leave"); + System.out.println("3.ready"); + System.out.println("4.list client"); + System.out.println("5.civ killed"); + } public int getPlayerID() { return playerID; } diff --git a/src/client/SisTerClient.java b/src/client/SisTerClient.java index 2aaf16bbca6ac7b245cb41cc037822b5823aa9e0..51194a38f82ca0c13ee7bf1f517552c0580c9426 100644 --- a/src/client/SisTerClient.java +++ b/src/client/SisTerClient.java @@ -24,22 +24,12 @@ public class SisTerClient { * @param args the command line arguments */ public static void main(String[] args) throws Exception { - /*String sentence; - String modifiedSentence; + System.out.println("Masukan Port"); BufferedReader inFromUser = new BufferedReader( new InputStreamReader(System.in)); - Socket clientSocket = new Socket("localhost", 6789); - DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream()); - BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); - sentence = inFromUser.readLine(); - outToServer.writeBytes(sentence + '\n'); - modifiedSentence = inFromServer.readLine(); - System.out.println("FROM SERVER: " + modifiedSentence); - clientSocket.close(); */ - Client c = new Client(0,9999); - c.connectToServer("localhost", 9999); - c.sendMessageToServer("{\"method\": \"join\",\"username\": \"sister\",\"udp_address\": \"192.168.1.3\",\"udp_port\": 9999}"); - - c.sendMessageToClient("localhost", 8888,"{\"method\":\"prepare_proposal\",\"proposal_id\": ["+c.getProposalNum()+","+c.getPlayerID()+"]}"); + int port = Integer.parseInt(inFromUser.readLine().toString()); + Client c = new Client(0,port); + c.client2server(); + //c.peerAsClient(); } diff --git a/src/server/Client.java b/src/server/Client.java index 47c60784a015deaaf4ca91844935510ad8b8d058..e2e755df15f7af6c9c0b7125fa3c16766ccd06ea 100644 --- a/src/server/Client.java +++ b/src/server/Client.java @@ -3,7 +3,7 @@ * To change this template file, choose Tools | Templates * and open the template in the editor. */ -package sisterserver; +package sisterclient; import java.io.BufferedReader; import java.io.DataOutputStream; @@ -17,6 +17,9 @@ import java.net.SocketException; import java.net.UnknownHostException; import java.util.Random; +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; /** * * @author LUCKY @@ -28,9 +31,13 @@ public class Client { private final int timeout=15000; //in milliseconds private boolean isProposer; private String ipAddress; //ipsendiri + private String serverAddress; private Random random; private int previouskpu; private Socket clientSocket; + private boolean tempc2s; + private boolean tempc2c; + public Client(int _playerid, int _port){ playerID = _playerid; @@ -39,6 +46,9 @@ public class Client { isProposer = false; random = new Random(); previouskpu = -1; + tempc2s = true; + tempc2c = true; + serverAddress = "localhost"; } public void setIsProposer(boolean _bool){ isProposer = _bool; @@ -67,20 +77,124 @@ public class Client { receiverSocket.receive(receivePacket); String response = new String(receivePacket.getData()); System.out.println("RESPONSE:" + response); - receiverSocket.close(); + //receiverSocket.close(); } - void connectToServer(String _ipAddr, int _port ) throws IOException{ - clientSocket = new Socket(_ipAddr, _port); - } - void sendMessageToServer(String in) throws IOException{ - DataOutputStream out = new DataOutputStream(clientSocket.getOutputStream()); - out.writeBytes(in+'\n'); + + public void peerAsClient() throws UnknownHostException, SocketException, IOException{ + byte[] sendData = new byte[1024]; + byte[] receiveData = new byte[1024]; + String input,sentence=""; + while(true){ + BufferedReader inFromUser =new BufferedReader(new InputStreamReader(System.in)); + DatagramSocket clientSocket = new DatagramSocket(); + InetAddress IPAddress = InetAddress.getByName("localhost"); + peermenu(); + input = inFromUser.readLine(); + switch(input){ + case "1" : sentence = "{\"method\": \"prepare_proposal\",\"proposal_id\": ["+proposalNum+","+playerID+"] }"; break; + case "2" : sentence = "{\"method\": \"accept_proposal\",\"proposal_id\": ["+proposalNum+","+playerID+"], \"kpu_id\" : 0 }";break; + case "3" : sentence = "{\"method\": \"vote_werewolf\",\"player_id\": 2 }";break; + case "4" : sentence = "{\"method\": \"vote_civilian\",\"player_id\": 2 }";break; + default : sentence ="";break; + } + sendData = sentence.getBytes(); + DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, port); + clientSocket.send(sendPacket); + if (sentence != ""){ + DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); + clientSocket.receive(receivePacket); + String modifiedSentence = new String(receivePacket.getData()); + System.out.println("FROM SERVER:" + modifiedSentence); + } + + clientSocket.close(); + } } - public void receiveMessageFromServer() throws IOException, ClassNotFoundException{ - BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); + void peermenu(){ + System.out.println("1.prepare proposal"); + System.out.println("2.accept proposal"); + System.out.println("3.vote werewolf"); + System.out.println("4.vote_civillian"); + } - + public void peerAsServer() throws SocketException, IOException{ + DatagramSocket serverSocket = new DatagramSocket(port); + String response,method; + while(tempc2c) + { + byte[] receiveData = new byte[1024]; + byte[] sendData = new byte[1024]; + DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); + serverSocket.receive(receivePacket); + String request = new String( receivePacket.getData()); + System.out.println("RECEIVED: " + request); + InetAddress IPAddress = receivePacket.getAddress(); + int port = receivePacket.getPort(); + if (isJSON(request)){ + JSONObject j = new JSONObject(request); + method = j.get("method").toString(); + switch(method){ + case "prepare_proposal" : response = "{\"status\": \"ok\",\"description\":\"accepted\", \"previous_accepted\" : "+previouskpu+"}";break; + case "accept_proposal" : response = "{\"status\": \"ok\",\"description\":\"accepted\"}";break; + case "vote_werewolf" : response = "{\"status\": \"ok\",\"description\":\"Vote Accepted\"}";break; + case "vote_civilian": response ="{\"status\": \"ok\",\"description\":\"Vote Accepted\"}";break; + default: response = ""; break; + } + sendData = response.getBytes(); + DatagramPacket sendPacket =new DatagramPacket(sendData, sendData.length, IPAddress, port); + + }else{ + tempc2c=false; + } + + } + } + public void client2server() throws IOException{ + String message="",response="",input; + while(tempc2s){ + client2servermenu(); + BufferedReader inFromUser = new BufferedReader( new InputStreamReader(System.in)); + clientSocket = new Socket(serverAddress, port); + DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream()); + BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); + input = inFromUser.readLine(); + switch(input){ + case "1" : message = "{\"method\": \"join\",\"username\": \"sister\",\"udp_address\": \"192.168.1.3\",\"udp_port\": 9999}";break; + case "2" : message = "{\"method\": \"leave\"}";break; + case "3" : message = "{\"method\": \"ready\"}";break; + case "4" : message = "{\"method\": \"client_address\"}";break; + case "5" : message = "{\"method\": \"vote_result_civilian\",\"vote_status\": 1,\"player_killed\": 4,\"vote_result\": [[0, 1], [1, 2]]}";break; + default : message = "hua";tempc2s = false;break; + } + outToServer.writeBytes(message + '\n'); + if (message == "hua"){} + else{ + response = inFromServer.readLine(); + System.out.println("response: " + response); + } + clientSocket.close(); + } + } + private boolean isJSON(String test){ + try{ + new JSONObject(test); + }catch(JSONException ex){ + try{ + new JSONArray(test); + }catch(JSONException ex2){ + return false; + } + } + return true; + } + public void client2servermenu(){ + System.out.println("1.join"); + System.out.println("2.leave"); + System.out.println("3.ready"); + System.out.println("4.list client"); + System.out.println("5.civ killed"); + } public int getPlayerID() { return playerID; } diff --git a/src/server/Server.java b/src/server/Server.java index 5a5b2f6375b3d38ba7f9632d34e4e4cccbf24b10..10f8d18c53b81f7c278d9836acae0d9c223dc74a 100644 --- a/src/server/Server.java +++ b/src/server/Server.java @@ -10,11 +10,13 @@ import java.io.ObjectOutputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; +import org.json.JSONArray; +import org.json.JSONException; import org.json.JSONObject; public class Server implements Runnable { - private Paxos paxos; +//private Paxos paxos; private String host; private int port; private Socket socket; @@ -22,11 +24,13 @@ public class Server implements Runnable private ServerSocket serverSocket; private int numPlayer; private boolean playing; - //PrintStream streamToClient; + private boolean temps2c; +//PrintStream streamToClient; BufferedReader streamFromClient; Socket fromClient; static int count = 0; Thread thread; + public Server() { @@ -43,15 +47,11 @@ public class Server implements Runnable } public Server(String _host, int _port){ - try{ - host = _host; - port = _port; - serverSocket = new ServerSocket(_port); - socket = serverSocket.accept(); - playing = false; - }catch(IOException e){ - - } + host = _host; + port = _port; + playing = false; + numPlayer= 0; + temps2c = true; } public boolean isWerewolf() @@ -120,17 +120,51 @@ public class Server implements Runnable } } + - public String receiveMessage() throws IOException{ - String temp = null; - BufferedReader inFromClient =new BufferedReader(new InputStreamReader(socket.getInputStream())); - temp = inFromClient.readLine(); - return temp; + public void server2client() throws IOException{ + String response,request,method; + ServerSocket serverSocket = new ServerSocket(port); + + while(temps2c) + { + Socket connectionSocket = serverSocket.accept(); + BufferedReader inFromClient =new BufferedReader(new InputStreamReader(connectionSocket.getInputStream())); + DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream()); + request = inFromClient.readLine(); + System.out.println("Received: " + request); + + if (isJSON(request)){ + JSONObject j = new JSONObject(request); + method = j.get("method").toString(); + switch(method){ + case "join" : response = "{\"status\": \"ok\",\"player_id\":"+numPlayer+"}";numPlayer++;break; + case "leave" : response = "{\"status\": \"ok\"}";break; + case "ready" : response = "{\"status\": \"ok\",\"description\":\"Waiting other player to start\"}";break; + case "client_address": response ="not";break; + case "vote_result_civilian": response = "{\"status\": \"ok\",\"description\":\"civ Killed\"}";break; + default: response = ""; break; + } + response = response + '\n'; + outToClient.writeBytes(response); + }else{ + temps2c=false; + } + + + } } - public void sendMessage(String out) throws IOException{ - DataOutputStream outToClient = new DataOutputStream(socket.getOutputStream()); - String response = out + '\n'; - outToClient.writeBytes(response); + private boolean isJSON(String test){ + try{ + new JSONObject(test); + }catch(JSONException ex){ + try{ + new JSONArray(test); + }catch(JSONException ex2){ + return false; + } + } + return true; } @Override public void run() { diff --git a/src/server/SisterServer.java b/src/server/SisterServer.java index 2edc01783593a060ae8c5c31e7a61a57be248ae8..558fc08e20a98fecf88411f0c8b6af668ecd4981 100644 --- a/src/server/SisterServer.java +++ b/src/server/SisterServer.java @@ -21,28 +21,18 @@ public class SisterServer { * @param args the command line arguments */ public static void main(String[] args) throws Exception { - /* String clientSentence; - String capitalizedSentence; - ServerSocket welcomeSocket = new ServerSocket(6789); + System.out.println("Masukan address"); + BufferedReader inFromUser = new BufferedReader( new InputStreamReader(System.in)); + String address = inFromUser.readLine().toString(); + + System.out.println("Masukan Port"); + inFromUser = new BufferedReader( new InputStreamReader(System.in)); + int port = Integer.parseInt(inFromUser.readLine().toString()); + Server s = new Server(address,port); + s.server2client(); + //Client c = new Client(0,9999); + //c.peerAsServer(); - while(true) - { - Socket connectionSocket = welcomeSocket.accept(); - BufferedReader inFromClient =new BufferedReader(new InputStreamReader(connectionSocket.getInputStream())); - DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream()); - clientSentence = inFromClient.readLine(); - System.out.println("Received: " + clientSentence); - capitalizedSentence = clientSentence.toUpperCase() + '\n'; - outToClient.writeBytes(capitalizedSentence); - - }*/ - /*Server s = new Server("localhost",9999); - String request = s.receiveMessage(); - System.out.println(request); - JSONObject j = new JSONObject(request); - System.out.println(j.get("method"));*/ - Client c = new Client(1,9999); - c.receiveMessageFromClient("localhost", 8888); } }