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 9a7c12ec550b8cc6984011f603a59c193ce174a5..54deb228bc4fc036c674ff6804f130c31531dc7a 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(); public void vote(){ 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 3e370cd0d81594ed35070dd5b003fb2ddb2015e2..485c4aa0ca468a2b0f38fd1ece5f6f821ae84c4e 100644 --- a/src/server/Server.java +++ b/src/server/Server.java @@ -10,6 +10,8 @@ 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; import java.util.LinkedList; @@ -17,6 +19,24 @@ import java.util.Stack; public class Server implements Runnable { +<<<<<<< HEAD +//private Paxos paxos; + private String host; + private int port; + private Socket socket; + private final String DEFAULT_HOST = "localhost"; + private ServerSocket serverSocket; + private int numPlayer; + private boolean playing; + private boolean temps2c; +//PrintStream streamToClient; + BufferedReader streamFromClient; + Socket fromClient; + static int count = 0; + Thread thread; + +======= +>>>>>>> 50cd7dce6ca5ad2a4fe6fb38066efe574e692b88 private int totalProcesses; private int numProposers; @@ -24,7 +44,41 @@ public class Server implements Runnable private int numLearners; private int decision=-1; +<<<<<<< HEAD + try{ + serverSocket = new ServerSocket(1001); + } catch (Exception e) { + e.printStackTrace(); + } + + } + + public Server(String _host, int _port){ + host = _host; + port = _port; + playing = false; + numPlayer= 0; + temps2c = true; + + } + public boolean isWerewolf() + { + boolean yes = false; + // for werewolf + return yes; + } + + public void connect(String host, int port) throws IOException + { + this.host = host; + this.port = port; + socket = new Socket(host, port); + System.out.println("Game sudah dimulai... V^__^V"); + + } +======= LinkedList<String>[] queues; +>>>>>>> 50cd7dce6ca5ad2a4fe6fb38066efe574e692b88 @SuppressWarnings("unchecked") public Server(int numProposers, int numAcceptors, int numLearners){ @@ -46,9 +100,62 @@ public class Server implements Runnable return numProposers; } +<<<<<<< HEAD + + + 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; + } + + + } + } + 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() { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } +======= public int getnumLearners(){ return numLearners } +>>>>>>> 50cd7dce6ca5ad2a4fe6fb38066efe574e692b88 // untuk channel communication dari proses processID public Channel getChannel(int processID){ diff --git a/src/server/SisterServer.java b/src/server/SisterServer.java index c9e81b6da59d4cba74dec9991948be02eaed73a8..f5d08d52cb1288597b6fad08ba7e2379c8b2451b 100644 --- a/src/server/SisterServer.java +++ b/src/server/SisterServer.java @@ -26,10 +26,20 @@ 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(); + +<<<<<<< HEAD +======= while(true) { Socket connectionSocket = welcomeSocket.accept(); @@ -51,6 +61,16 @@ public class SisterServer { Client c = new Client(1,9999); c.receiveMessageFromClient("localhost", 8888); +<<<<<<< HEAD +======= + + // creating consensus + public void consensus(){ + + } + +>>>>>>> 50cd7dce6ca5ad2a4fe6fb38066efe574e692b88 +>>>>>>> 03e8375e6aaa270bdfb4b367153ed7592937748f } }