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);
     }
     
 }