Advertisement
Guest User

Untitled

a guest
Nov 16th, 2016
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.46 KB | None | 0 0
  1. package chatserver.TCP;
  2.  
  3. import java.io.BufferedReader;
  4. import java.io.IOException;
  5. import java.io.InputStreamReader;
  6. import java.io.PrintWriter;
  7. import Users.*;
  8. import util.Config;
  9. import java.net.Socket;
  10.  
  11. /**
  12.  * Created by manu on 14.11.16.
  13.  */
  14. public class TCPListener extends Thread{
  15.  
  16.     private Socket socket;
  17.  
  18.  
  19.     public TCPListener(Socket socket) {
  20.         this.socket = socket;
  21.     }
  22.  
  23.     @Override
  24.     public void run() {
  25.         System.out.println("Incoming TCP connection");
  26.         try {
  27.             User user = UserList.getInstance().getUserBySocket(socket.getRemoteSocketAddress());
  28.             String serverResponse = "";
  29.             String userRequest = "";
  30.             String[] splitRequest;
  31.             boolean userIsLoggedIn = false;
  32.             BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
  33.             PrintWriter writer = new PrintWriter(socket.getOutputStream(),true);
  34.  
  35.             while((userRequest = reader.readLine()) != null) {
  36.                 //System.out.println("Client request: " + userRequest);
  37.  
  38.                 splitRequest = userRequest.split("\\s"); // split at whitespaces
  39.                 serverResponse = "Error: Unkown request sent\n";
  40.  
  41.                 // Check if request has a valid format
  42.  
  43.                 if(splitRequest.length >= 1 && splitRequest.length <= 3) {
  44.                     //First check if the user is already logged in, in case first command is not !login
  45.                     if(!userRequest.startsWith("!login")) {
  46.                         if(user == null) {
  47.                             userIsLoggedIn = false;
  48.                             serverResponse = "Error, you need to be logged in first!";
  49.                         } else {
  50.                             userIsLoggedIn = true;
  51.                             serverResponse = "You are already logged in";
  52.                         }
  53.                     }
  54.  
  55.                     if(userRequest.startsWith("!login") && !userIsLoggedIn){
  56.                         String username = splitRequest[1];
  57.                         String password = splitRequest[2];
  58.                         if(UserList.getInstance().getUser(username) != null && UserList.getInstance().getUser(username).login(socket,password,new Config("user"))) {
  59.                             serverResponse = "Successfully logged in.";
  60.                             user = UserList.getInstance().getUserBySocket(socket.getRemoteSocketAddress());
  61.                             userIsLoggedIn = true;
  62.                         } else {
  63.                             serverResponse = "Wrong username or password";
  64.                         }
  65.                     } else if(userRequest.startsWith("!logout") && (userIsLoggedIn == true)) {
  66.                         UserList.getInstance().getUserBySocket(socket.getRemoteSocketAddress()).logout();
  67.                         userIsLoggedIn = false;
  68.                         serverResponse = "Successfully logged out";
  69.                     } else if (userRequest.startsWith("!send") && (userIsLoggedIn == true)) {
  70.                         String msg = splitRequest[1];
  71.                         // In case there were many whitespaces, we need to put back the msg to its original state
  72.                         // with the whitespaces ofc
  73.                         for(int i = 2; i < splitRequest.length; i++) {
  74.                             msg += " " + splitRequest[i];
  75.                         }
  76.                         // Sendmsg to all online Clients
  77.                         PrintWriter usersOutput;
  78.                         for(User onlineUser : UserList.getInstance().getOnlineUsers()) {
  79.                             if(onlineUser == user) {
  80.                                 continue;
  81.                             }
  82.                             usersOutput = new PrintWriter(onlineUser.getSocket().getOutputStream(),true);
  83.                             usersOutput.println("Pub: " + user.getName() + ": " + msg);
  84.                         }
  85.                     } else if(userRequest.startsWith("!register") && (userIsLoggedIn == true)) {
  86.                         String register = splitRequest[1];
  87.                         try {
  88.                             user.register(register);
  89.                             serverResponse = "Successfully registered.";
  90.                         } catch(Exception ex) {
  91.                             //ex.toString();
  92.                         }
  93.                     } else if(userRequest.startsWith("!lookup") && (userIsLoggedIn == true)) {
  94.                         String findUser = splitRequest[1];
  95.                         serverResponse = UserList.getInstance().lookUpUser(findUser);
  96.                     } else if (userRequest.startsWith("!exit") && (userIsLoggedIn == true)) {
  97.                         if(userIsLoggedIn) {
  98.                             UserList.getInstance().getUserBySocket(socket.getRemoteSocketAddress()).logout();
  99.                             serverResponse = "Successfully logged out! Exitiing Client";
  100.                         }
  101.                     }
  102.                 }
  103.                 //System.out.println("Response to Client: " + user.getName() + " : " + serverResponse);
  104.                 writer.println(serverResponse);
  105.             }
  106.  
  107.         } catch(IOException ex) {
  108.             ex.toString();
  109.         }
  110.  
  111.         if(socket != null && !socket.isClosed()) {
  112.             try {
  113.                 socket.close();
  114.             } catch (IOException ex) {
  115.                 ex.toString();
  116.             }
  117.         }
  118.     }
  119. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement