Advertisement
Guest User

Untitled

a guest
Nov 18th, 2017
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 7.11 KB | None | 0 0
  1. package robot;
  2.  
  3. import sun.nio.ch.ThreadPool;
  4.  
  5. import java.io.BufferedReader;
  6. import java.io.IOException;
  7. import java.io.InputStreamReader;
  8. import java.io.PrintWriter;
  9. import java.net.ServerSocket;
  10. import java.net.Socket;
  11. import java.net.SocketException;
  12.  
  13. enum ServerResponse{
  14.     LOGIN("200 LOGIN \r\n"),
  15.     PASSWORD("201 PASSWORD \r\n"),
  16.     OK("200 OK \r\n"),
  17.     BADCHECKSUM("300 BAD CHECKSUM \r\n"),
  18.     BADAUTHROZATION("500 LOGIN FAILED \r\n"),
  19.     BADSYNTAX("501 SYNTAX ERROR \r\n"),
  20.     TIMEOUT("502 TIMEOUT \r\n");
  21.  
  22.  
  23.     private String value;
  24.     ServerResponse(String value){
  25.         this.value = value;
  26.     }
  27.  
  28.     public String getValue() {
  29.         return value;
  30.     }
  31. }
  32.  
  33. class InputValidator{
  34.     static char[] robotSyntax = {'R','o','b','o','t'};
  35.     public static boolean isRobot(char c, int position){
  36.         return robotSyntax[position] == c;
  37.     }
  38.     public static int getLength(){
  39.         return robotSyntax.length;
  40.     }
  41. }
  42.  
  43. class ThreadWorker implements Runnable{
  44.     private Socket clientSocket;
  45.     private BufferedReader bufferedReader;
  46.     PrintWriter outputStream;
  47.     public ThreadWorker(Socket clientSocket) throws SocketException {
  48.         this.clientSocket = clientSocket;
  49.         clientSocket.setSoTimeout(45/60);
  50.         System.out.println("client accepted from: " + clientSocket.getInetAddress()
  51.                 + ":" + clientSocket.getPort());
  52.     }
  53.  
  54.     @Override
  55.     public void run() {
  56.         try {
  57.             outputStream = new PrintWriter(clientSocket.getOutputStream());
  58.             outputStream.println(ServerResponse.LOGIN);
  59.             outputStream.flush();
  60.             int status = 1;
  61.             char previouschar = 0;
  62.             char input;
  63.             int value;
  64.             int readedchars = 0;
  65.             StringBuilder stringBuilder = new StringBuilder();
  66.             //Thread.sleep(30000);
  67.             while (true){
  68.                 bufferedReader = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
  69.                 if (status == 1){
  70.                     boolean isrobot= false;
  71.                     int position = 0;
  72.                     while ((value = bufferedReader.read()) != -1 && previouschar != 13 && value != 10){
  73.                         input = (char)value;
  74.                         if (InputValidator.isRobot(input,position)){
  75.                             isrobot = true;
  76.                             previouschar = input;
  77.                             if (position != InputValidator.getLength() -1){
  78.                                 position+=1;
  79.                             }
  80.                         }
  81.                         else if (isrobot && readedchars == 5){
  82.                             if (input != ' '){
  83.                                 outputStream.println(ServerResponse.BADSYNTAX);
  84.                                 outputStream.flush();
  85.                                 outputStream.close();
  86.                                 clientSocket.close();
  87.                             }
  88.                         }
  89.                         else if (isrobot && readedchars > 5){
  90.                             stringBuilder.append(input);
  91.                             previouschar = input;
  92.                         }
  93.                         else {
  94.                             outputStream.println(ServerResponse.BADSYNTAX);
  95.                             outputStream.flush();
  96.                             outputStream.close();
  97.                             clientSocket.close();
  98.                         }
  99.                         readedchars++;
  100.                     }
  101.                     status = 2;
  102.                     outputStream.println(ServerResponse.PASSWORD);
  103.                     outputStream.flush();
  104.                     System.out.println(stringBuilder);
  105.                 }
  106.                 else if (status == 2){
  107.                     StringBuilder passBuilder = new StringBuilder();
  108.                     int checksum = 0;
  109.                     while ((value = bufferedReader.read()) != -1 && previouschar != 13 && value != 10){
  110.                         if (48 <value && value < 57){
  111.                             previouschar = (char) value;
  112.                             passBuilder.append((char) value);
  113.                         }
  114.                         else {
  115.                             outputStream.println(ServerResponse.BADAUTHROZATION);
  116.                             outputStream.flush();
  117.                             outputStream.close();
  118.                             clientSocket.close();
  119.                             break;
  120.                         }
  121.                     }
  122.                     for (int i = 0; i < stringBuilder.length(); i++) {
  123.                         checksum += (int)stringBuilder.charAt(i);
  124.                     }
  125.                     if (passBuilder.length() > 0){
  126.                         try{
  127.                             if (checksum == Integer.parseInt(passBuilder.toString())){
  128.                                 outputStream.println(ServerResponse.OK);
  129.                                 outputStream.flush();
  130.                             }
  131.                             else {
  132.                                 outputStream.println(ServerResponse.BADAUTHROZATION);
  133.                                 outputStream.flush();
  134.                                 outputStream.close();
  135.                                 clientSocket.close();
  136.                             }
  137.                         } catch (NumberFormatException e){
  138.                             outputStream.println(ServerResponse.BADAUTHROZATION);
  139.                             outputStream.flush();
  140.                             outputStream.close();
  141.                             clientSocket.close();
  142.                         }
  143.                     }
  144.                     status = 3;
  145.                 }
  146.                 else if (status == 3){
  147.                     int position = 0;
  148.                     while ((value = bufferedReader.read()) != -1 && previouschar != 13 && value != 10){
  149.                         if ()
  150.                     }
  151.                 }
  152.  
  153.             }
  154.         } catch (IOException e) {
  155.             System.err.println("Couldn't get I/O.");
  156.             System.exit(1);
  157.         }
  158.     }
  159. }
  160.  
  161.  
  162. class TCPServer{
  163.     private ServerSocket serverSocket;
  164.     public void main(int port){
  165.         try {
  166.             serverSocket = new ServerSocket(port);
  167.             System.out.println("Vytvoren server");
  168.  
  169.                 ThreadWorker worker = new ThreadWorker(serverSocket.accept());
  170.                 worker.run();
  171.  
  172.         } catch (IOException e) {
  173.             System.err.println("Could not listen on port: " + port);
  174.             System.exit(1);
  175.         }
  176.     }
  177. }
  178.  
  179. public class Robot {
  180.     public static void main(String[] args) {
  181.         Integer port = Integer.parseInt(args[0]);
  182.         if (3000 <= port && port <= 3900){
  183.             if (args.length != 0 ){
  184.                 TCPServer server = new TCPServer();
  185.                 server.main(port);
  186.             }
  187.             else {
  188.                 System.err.println("Server: java robot.Robot <port>");
  189.             }
  190.         }
  191.         else {
  192.             System.err.println("INVALID PORT");
  193.         }
  194.  
  195.     }
  196. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement