Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package chatserver.TCP;
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import java.io.PrintWriter;
- import Users.*;
- import util.Config;
- import java.net.Socket;
- /**
- * Created by manu on 14.11.16.
- */
- public class TCPListener extends Thread{
- private Socket socket;
- public TCPListener(Socket socket) {
- this.socket = socket;
- }
- @Override
- public void run() {
- System.out.println("Incoming TCP connection");
- try {
- User user = UserList.getInstance().getUserBySocket(socket.getRemoteSocketAddress());
- String serverResponse = "";
- String userRequest = "";
- String[] splitRequest;
- boolean userIsLoggedIn = false;
- BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
- PrintWriter writer = new PrintWriter(socket.getOutputStream(),true);
- while((userRequest = reader.readLine()) != null) {
- //System.out.println("Client request: " + userRequest);
- splitRequest = userRequest.split("\\s"); // split at whitespaces
- serverResponse = "Error: Unkown request sent\n";
- // Check if request has a valid format
- if(splitRequest.length >= 1 && splitRequest.length <= 3) {
- //First check if the user is already logged in, in case first command is not !login
- if(!userRequest.startsWith("!login")) {
- if(user == null) {
- userIsLoggedIn = false;
- serverResponse = "Error, you need to be logged in first!";
- } else {
- userIsLoggedIn = true;
- serverResponse = "You are already logged in";
- }
- }
- if(userRequest.startsWith("!login") && !userIsLoggedIn){
- String username = splitRequest[1];
- String password = splitRequest[2];
- if(UserList.getInstance().getUser(username) != null && UserList.getInstance().getUser(username).login(socket,password,new Config("user"))) {
- serverResponse = "Successfully logged in.";
- user = UserList.getInstance().getUserBySocket(socket.getRemoteSocketAddress());
- userIsLoggedIn = true;
- } else {
- serverResponse = "Wrong username or password";
- }
- } else if(userRequest.startsWith("!logout") && (userIsLoggedIn == true)) {
- UserList.getInstance().getUserBySocket(socket.getRemoteSocketAddress()).logout();
- userIsLoggedIn = false;
- serverResponse = "Successfully logged out";
- } else if (userRequest.startsWith("!send") && (userIsLoggedIn == true)) {
- String msg = splitRequest[1];
- // In case there were many whitespaces, we need to put back the msg to its original state
- // with the whitespaces ofc
- for(int i = 2; i < splitRequest.length; i++) {
- msg += " " + splitRequest[i];
- }
- // Sendmsg to all online Clients
- PrintWriter usersOutput;
- for(User onlineUser : UserList.getInstance().getOnlineUsers()) {
- if(onlineUser == user) {
- continue;
- }
- usersOutput = new PrintWriter(onlineUser.getSocket().getOutputStream(),true);
- usersOutput.println("Pub: " + user.getName() + ": " + msg);
- }
- } else if(userRequest.startsWith("!register") && (userIsLoggedIn == true)) {
- String register = splitRequest[1];
- try {
- user.register(register);
- serverResponse = "Successfully registered.";
- } catch(Exception ex) {
- //ex.toString();
- }
- } else if(userRequest.startsWith("!lookup") && (userIsLoggedIn == true)) {
- String findUser = splitRequest[1];
- serverResponse = UserList.getInstance().lookUpUser(findUser);
- } else if (userRequest.startsWith("!exit") && (userIsLoggedIn == true)) {
- if(userIsLoggedIn) {
- UserList.getInstance().getUserBySocket(socket.getRemoteSocketAddress()).logout();
- serverResponse = "Successfully logged out! Exitiing Client";
- }
- }
- }
- //System.out.println("Response to Client: " + user.getName() + " : " + serverResponse);
- writer.println(serverResponse);
- }
- } catch(IOException ex) {
- ex.toString();
- }
- if(socket != null && !socket.isClosed()) {
- try {
- socket.close();
- } catch (IOException ex) {
- ex.toString();
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement