Kouksi44

SecureClient.java

Nov 25th, 2016
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.45 KB | None | 0 0
  1.  
  2.  
  3. import java.io.ObjectInputStream;
  4. import java.io.ObjectOutputStream;
  5. import java.lang.Exception;
  6. import java.lang.Runnable;
  7. import java.lang.Thread;
  8. import java.net.InetAddress;
  9. import java.net.Socket;
  10. import java.util.Observable;
  11. import java.util.Observer;
  12. import java.util.ArrayList;
  13. import java.io.Serializable;
  14. import java.net.InetAddress;
  15. import java.io.IOException;
  16. import java.net.UnknownHostException;
  17.  
  18.  enum MessageType {
  19.     MESSAGE, DISCONNECT, GETCLIENTS
  20. };
  21.  
  22.  
  23. class SecureClient extends Observable implements Runnable {
  24.     Socket socket;
  25.     private ObjectInputStream inputStream;
  26.     private ObjectOutputStream outputStream;
  27.     ArrayList<InetAddress> availableClients;
  28.     private final int timeout = 1000;
  29.    
  30.    
  31.     public SecureClient(int port,InetAddress serverIp) throws ServerUnavailableException {
  32.         try {
  33.             this.socket = new Socket(serverIp,port);
  34.             this.inputStream = new ObjectInputStream(socket.getInputStream());
  35.             this.outputStream = new ObjectOutputStream(socket.getOutputStream());
  36.             this.availableClients = new ArrayList<InetAddress>();
  37.         } catch (IOException e) {
  38.             e.printStackTrace();
  39.         }
  40.         //socket.connect(new InetSocketAddress(serverIp,port),timeout);
  41.        
  42.         if(!socket.isConnected()) {
  43.             throw new ServerUnavailableException("Server connection request timed out ("+timeout+"ms)");
  44.         }
  45.        
  46.         try {
  47.             this.run();
  48.         } catch(Exception e) {
  49.             System.out.println(e.getStackTrace());
  50.         }
  51.        
  52.     }
  53.    
  54.     public void sendMessage(String message,MessageType messageType,InetAddress receiver) throws Exception {
  55.         SecureMessage sMessage = new SecureMessage(message,messageType,receiver,socket.getInetAddress());
  56.         outputStream.writeObject(sMessage);
  57.     }
  58.    
  59.     public void disconnect(String reason) {
  60.         try {
  61.             sendMessage(reason,MessageType.DISCONNECT,InetAddress.getByName("127.0.0.1"));
  62.             socket.close();
  63.         } catch(Exception e) {
  64.             e.printStackTrace();
  65.         }
  66.        
  67.     }
  68.    
  69.     @Override
  70.     public void run() {
  71.         while (true) {
  72.             SecureMessage fromServer = null;
  73.             try {
  74.                 fromServer = (SecureMessage) inputStream.readObject();
  75.             } catch (Exception e) {
  76.                 System.out.println(e.getStackTrace());
  77.             }
  78.             if (fromServer != null) {
  79.                 setChanged();
  80.                 notifyObservers(fromServer);
  81.             }
  82.         }
  83.     }
  84.  
  85.    
  86. }
  87.  
  88.  
  89.  class ServerUnavailableException extends Exception {
  90.     private static final long serialVersionUID = 42L;
  91.     public ServerUnavailableException() {
  92.         super();
  93.     }
  94.   public ServerUnavailableException(String message) {
  95.         super(message);
  96.     }
  97.   public ServerUnavailableException(String message, Throwable cause) {
  98.         super(message, cause);
  99.     }
  100.   public ServerUnavailableException(Throwable cause) {
  101.         super(cause);
  102.     }
  103.    
  104. }
  105.  
  106.  class SecureMessage implements Serializable {
  107.     private static final long serialVersionUID = 42L;
  108.     private String message;
  109.     private InetAddress receiver;
  110.     private InetAddress sender;
  111.     private MessageType type; // can be MESSAGE, DISCONNECT, GETCLIENTS
  112.    
  113.     /**
  114.      * Wrapper for any message that is sent between clients. The object gets serialized and sent through tcp.
  115.      * @param   The message as a string object
  116.      * @param   The InetAddress of the receiver
  117.      * @param   The InetAddress of the sender
  118.      */
  119.     public SecureMessage(String message,MessageType messageType, InetAddress receiver, InetAddress sender) {
  120.         this.message = message;
  121.         this.type = messageType;
  122.         this.receiver = receiver;
  123.         this.sender = sender;
  124.     }
  125.    
  126.     /**
  127.      * Returns the message
  128.      * @return A message
  129.      */
  130.     public String getMessage() {
  131.         return this.message;
  132.     }
  133.    
  134.     /**
  135.      * Returns the receiver of the message
  136.      * @return A InetAddress representing the receiver
  137.      */
  138.     public InetAddress getReceiver() {
  139.         return this.receiver;
  140.     }
  141.    
  142.     /**
  143.      * Returns the sender of the message
  144.      * @return A InetAddress representing the sender
  145.      */
  146.     public InetAddress getSender() {
  147.         return this.sender;
  148.     }
  149. }
  150.  
  151.  
  152.  class ClientHandler extends Observable implements Observer{
  153.    
  154.     private ArrayList<SecureClient> clients = new ArrayList<SecureClient>();
  155.     private Observer owner;
  156.    
  157.     public ClientHandler(Observer owner) {
  158.         this.owner = owner;
  159.     }
  160.    
  161.     public void update(Observable o, Object message) {
  162.         if(o instanceof SecureClient) {
  163.             setChanged();
  164.             notifyObservers(message);
  165.         }
  166.     }
  167.    
  168.     public void addClient(SecureClient newClient) {
  169.         newClient.addObserver(this);
  170.         clients.add(newClient);
  171.     }
  172.    
  173.     public void disconnectClient(SecureClient client,String reason) {
  174.         clients.remove(client);
  175.         client.disconnect(reason);
  176.     }
  177.    
  178. }
Add Comment
Please, Sign In to add comment