Package connectionLayer

Source Code of connectionLayer.ServerLogin

package connectionLayer;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.ArrayBlockingQueue;

import logicLayer.FakeDB;

public class ServerLogin extends Thread {
 
  private ArrayBlockingQueue<String> waitingUsers;
  private ServerSocket serverSocket;
 
  public ServerLogin(ArrayBlockingQueue<String> waitingUsers)
  {
    try {
      serverSocket = new ServerSocket(8500,20);
    } catch (IOException e) {
     
      e.printStackTrace();
      System.exit(1);
    }
    this.waitingUsers=waitingUsers;
  }
 
  @Override
  public void run()
  {
    while(true)
    {
      Socket socket;
      try {
        socket = serverSocket.accept();
//        System.out.println("New client asked for a connection");
        TcpThread t = new TcpThread(socket);    // make a thread of it
//        System.out.println("Starting a thread for a new Client");
        t.start();
      } catch (IOException e) { 
        e.printStackTrace();
      // accept connection
    }
  }
 
  class TcpThread extends Thread {
    Socket socket;
    ObjectInputStream Sinput;
    ObjectOutputStream Soutput;

    TcpThread(Socket socket) {
      this.socket = socket;
    }
   
    public void run() {
      /* Creating both Data Streams */
      int loginStatus=0;
      boolean signUpStatus=true;
//      System.out.println("Thread trying to create Object Input/Output Streams");
      try {
        initStreams();
      } catch (IOException e1) {
        e1.printStackTrace();
        return;
      }

//      System.out.println("Thread waiting for a String from the Client");
      // read a String (which is an object)
      try {
        String username = (String) Sinput.readObject();
        String password = (String) Sinput.readObject();
        //str = str.toUpperCase();
        String toWrite="";
        int state=-1;
        if(username.charAt(0)=='0' && password.charAt(0)=='0')
        {
          state=0;
          loginStatus=login(username, password);
          if(loginStatus>=0)
            toWrite+="0";//"username: " + username.substring(1) + " OK";
          else
            toWrite+="1";//"username: " + username.substring(1) + " Bad";   
        }
        else if(username.charAt(0)=='1' && password.charAt(0)=='1')
        {
          state=1;
          signUpStatus = signup(username, password);
          if(signUpStatus==true)
            toWrite+="0";//"username: " + username.substring(1) + " OK";
          else
            toWrite+="1";//"username: " + username.substring(1) + " Bad";
        }

        Soutput.writeObject(toWrite);
        Soutput.flush();
        if(state!=0 || loginStatus<0)
          return;
       
        waitingUsers.put(username.substring(1));
      }
      catch (IOException e) {
        System.out.println("Lost connection from socket");
    //    System.out.println("Exception reading/writing  Streams: ");
    //    e.printStackTrace();
        return;                              
      }
      // will surely not happen with a String
      catch (ClassNotFoundException o) {                              
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
      finally {
        try {Soutput.close();}
        catch (Exception e){}
        try{Sinput.close();}
        catch(IOException e){}
        try{socket.close();}
        catch(IOException e){}
      }
     
    }

    private void initStreams() throws IOException {
        Soutput = new ObjectOutputStream(socket.getOutputStream());
        Soutput.flush();
        Sinput  = new ObjectInputStream(socket.getInputStream());
    }
   
    private int login(String username, String password)
    {
      int loginStatus=0;
      FakeDB fakeDB = FakeDB.getDB();
      loginStatus=fakeDB.signIn(username.substring(1), password.substring(1));
      System.out.println("username: " + username + ". login status: "+loginStatus);
      return loginStatus;
    }
   
    private boolean signup(String username, String password)
    {
      boolean signUpStatus= true;
      FakeDB fakeDB = FakeDB.getDB();
      signUpStatus=fakeDB.signUp(username.substring(1), password.substring(1));
      return signUpStatus;
    }
  }
 
 
}
TOP

Related Classes of connectionLayer.ServerLogin

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.