Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package robot;
- import sun.nio.ch.ThreadPool;
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import java.io.PrintWriter;
- import java.net.ServerSocket;
- import java.net.Socket;
- import java.net.SocketException;
- enum ServerResponse{
- LOGIN("200 LOGIN \r\n"),
- PASSWORD("201 PASSWORD \r\n"),
- OK("200 OK \r\n"),
- BADCHECKSUM("300 BAD CHECKSUM \r\n"),
- BADAUTHROZATION("500 LOGIN FAILED \r\n"),
- BADSYNTAX("501 SYNTAX ERROR \r\n"),
- TIMEOUT("502 TIMEOUT \r\n");
- private String value;
- ServerResponse(String value){
- this.value = value;
- }
- public String getValue() {
- return value;
- }
- }
- class InputValidator{
- static char[] robotSyntax = {'R','o','b','o','t'};
- public static boolean isRobot(char c, int position){
- return robotSyntax[position] == c;
- }
- public static int getLength(){
- return robotSyntax.length;
- }
- }
- class ThreadWorker implements Runnable{
- private Socket clientSocket;
- private BufferedReader bufferedReader;
- PrintWriter outputStream;
- public ThreadWorker(Socket clientSocket) throws SocketException {
- this.clientSocket = clientSocket;
- clientSocket.setSoTimeout(45/60);
- System.out.println("client accepted from: " + clientSocket.getInetAddress()
- + ":" + clientSocket.getPort());
- }
- @Override
- public void run() {
- try {
- outputStream = new PrintWriter(clientSocket.getOutputStream());
- outputStream.println(ServerResponse.LOGIN);
- outputStream.flush();
- int status = 1;
- char previouschar = 0;
- char input;
- int value;
- int readedchars = 0;
- StringBuilder stringBuilder = new StringBuilder();
- //Thread.sleep(30000);
- while (true){
- bufferedReader = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
- if (status == 1){
- boolean isrobot= false;
- int position = 0;
- while ((value = bufferedReader.read()) != -1 && previouschar != 13 && value != 10){
- input = (char)value;
- if (InputValidator.isRobot(input,position)){
- isrobot = true;
- previouschar = input;
- if (position != InputValidator.getLength() -1){
- position+=1;
- }
- }
- else if (isrobot && readedchars == 5){
- if (input != ' '){
- outputStream.println(ServerResponse.BADSYNTAX);
- outputStream.flush();
- outputStream.close();
- clientSocket.close();
- }
- }
- else if (isrobot && readedchars > 5){
- stringBuilder.append(input);
- previouschar = input;
- }
- else {
- outputStream.println(ServerResponse.BADSYNTAX);
- outputStream.flush();
- outputStream.close();
- clientSocket.close();
- }
- readedchars++;
- }
- status = 2;
- outputStream.println(ServerResponse.PASSWORD);
- outputStream.flush();
- System.out.println(stringBuilder);
- }
- else if (status == 2){
- StringBuilder passBuilder = new StringBuilder();
- int checksum = 0;
- while ((value = bufferedReader.read()) != -1 && previouschar != 13 && value != 10){
- if (48 <value && value < 57){
- previouschar = (char) value;
- passBuilder.append((char) value);
- }
- else {
- outputStream.println(ServerResponse.BADAUTHROZATION);
- outputStream.flush();
- outputStream.close();
- clientSocket.close();
- break;
- }
- }
- for (int i = 0; i < stringBuilder.length(); i++) {
- checksum += (int)stringBuilder.charAt(i);
- }
- if (passBuilder.length() > 0){
- try{
- if (checksum == Integer.parseInt(passBuilder.toString())){
- outputStream.println(ServerResponse.OK);
- outputStream.flush();
- }
- else {
- outputStream.println(ServerResponse.BADAUTHROZATION);
- outputStream.flush();
- outputStream.close();
- clientSocket.close();
- }
- } catch (NumberFormatException e){
- outputStream.println(ServerResponse.BADAUTHROZATION);
- outputStream.flush();
- outputStream.close();
- clientSocket.close();
- }
- }
- status = 3;
- }
- else if (status == 3){
- int position = 0;
- while ((value = bufferedReader.read()) != -1 && previouschar != 13 && value != 10){
- if ()
- }
- }
- }
- } catch (IOException e) {
- System.err.println("Couldn't get I/O.");
- System.exit(1);
- }
- }
- }
- class TCPServer{
- private ServerSocket serverSocket;
- public void main(int port){
- try {
- serverSocket = new ServerSocket(port);
- System.out.println("Vytvoren server");
- ThreadWorker worker = new ThreadWorker(serverSocket.accept());
- worker.run();
- } catch (IOException e) {
- System.err.println("Could not listen on port: " + port);
- System.exit(1);
- }
- }
- }
- public class Robot {
- public static void main(String[] args) {
- Integer port = Integer.parseInt(args[0]);
- if (3000 <= port && port <= 3900){
- if (args.length != 0 ){
- TCPServer server = new TCPServer();
- server.main(port);
- }
- else {
- System.err.println("Server: java robot.Robot <port>");
- }
- }
- else {
- System.err.println("INVALID PORT");
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement