diff --git a/AphorismServer/AphorismServer.jar b/AphorismServer/AphorismServer.jar new file mode 100644 index 0000000..15e7a9f Binary files /dev/null and b/AphorismServer/AphorismServer.jar differ diff --git a/AphorismServer/src/client/Client.java b/AphorismServer/src/client/Client.java new file mode 100644 index 0000000..837f8cf --- /dev/null +++ b/AphorismServer/src/client/Client.java @@ -0,0 +1,22 @@ +package client; + +import javafx.application.Application; +import javafx.fxml.FXMLLoader; +import javafx.scene.Parent; +import javafx.scene.Scene; +import javafx.stage.Stage; + +public class Client extends Application { + + @Override + public void start(Stage stage) throws Exception{ + Parent root = FXMLLoader.load(getClass().getResource("client.fxml")); + stage.setTitle("Client"); + stage.setScene(new Scene(root)); + stage.show(); + } + + public static void main(String[] args) { + launch(args); + } +} diff --git a/AphorismServer/src/client/ClientController.java b/AphorismServer/src/client/ClientController.java new file mode 100644 index 0000000..bf94a4c --- /dev/null +++ b/AphorismServer/src/client/ClientController.java @@ -0,0 +1,84 @@ +package client; + +import javafx.fxml.FXML; + +import javafx.scene.control.Button; +import javafx.scene.control.TextArea; +import javafx.scene.control.TextField; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.PrintWriter; +import java.net.*; + +public class ClientController { + @FXML + private Button btnConnect; + @FXML + private Button btnExit; + @FXML + private Button btnNew; + @FXML + private TextArea taDisplay; + @FXML + private TextField tfServerIP; + @FXML + private TextField tfState; + + Socket clientSocket = null; + + private void getAphorism(){ + ClientProcess process = new ClientProcess(this.clientSocket); + Thread thread = new Thread(process); + thread.setDaemon(true); + thread.start(); + taDisplay.textProperty().bind(process.messageProperty()); + } + + public void setBtnExit(){ + try { + PrintWriter pwOut = new PrintWriter(this.clientSocket.getOutputStream(), true); + pwOut.println("exit"); + System.exit(0); + } + catch (NullPointerException e){ + tfState.setText("Nothing for disconnect"); + } + catch (IOException e){ + tfState.setText("Disconnection error"); + } + } + + public void getConnect() throws IOException { + String sServerIP = tfServerIP.getText(); + tfState.setText("Connecting with "+sServerIP+"..."); + try{ + this.clientSocket = new Socket(sServerIP,2020); + tfState.setText("Connection with "+sServerIP+" success"); + } + catch (UnknownHostException e){ + tfState.setText("Connection failed: Unknown host"); + } + catch (NoRouteToHostException e){ + tfState.setText("Connection failed: No connection"); + } + catch (ConnectException e){ + tfState.setText("Connection failed: Connection error"); + } + catch (IOException e){ + tfState.setText("Connection failed: Input/output error"); + } + + getAphorism(); + } + + public void setBtnNew(){ + if (clientSocket == null){ + tfState.setText("No connection"); + } + else { + getAphorism(); + } + } +} diff --git a/AphorismServer/src/client/ClientProcess.java b/AphorismServer/src/client/ClientProcess.java new file mode 100644 index 0000000..9768610 --- /dev/null +++ b/AphorismServer/src/client/ClientProcess.java @@ -0,0 +1,42 @@ +package client; + +import javafx.concurrent.Task; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.PrintWriter; +import java.net.Socket; + +public class ClientProcess extends Task{ + + private Socket clientSocket; + + public ClientProcess(Socket clientSocket) { + this.clientSocket = clientSocket; + } + + @Override + public Void call() { + getTime(); + return null; + } + + public void getTime(){ + BufferedReader brIn = null; + PrintWriter pwOut = null; + String sInput=null; + try{ + brIn = new BufferedReader(new InputStreamReader(this.clientSocket.getInputStream())); + pwOut = new PrintWriter(this.clientSocket.getOutputStream(),true); + } + catch (IOException e) {} + + pwOut.println("aphorism"); + try { + sInput = brIn.readLine(); + updateMessage(sInput); + } + catch (IOException e){} + } +} diff --git a/AphorismServer/src/client/client.fxml b/AphorismServer/src/client/client.fxml new file mode 100644 index 0000000..ece0ad6 --- /dev/null +++ b/AphorismServer/src/client/client.fxml @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/AphorismServer/src/main/Main.java b/AphorismServer/src/main/Main.java new file mode 100644 index 0000000..e39a8f6 --- /dev/null +++ b/AphorismServer/src/main/Main.java @@ -0,0 +1,23 @@ +package main; + +import javafx.application.Application; +import javafx.fxml.FXMLLoader; +import javafx.scene.Parent; +import javafx.scene.Scene; +import javafx.stage.Stage; + +public class Main extends Application { + + @Override + public void start(Stage primaryStage) throws Exception{ + Parent root = FXMLLoader.load(getClass().getResource("main.fxml")); + primaryStage.setTitle("Server Clock"); + primaryStage.setScene(new Scene(root)); + primaryStage.show(); + } + + + public static void main(String[] args) { + launch(args); + } +} diff --git a/AphorismServer/src/main/MainController.java b/AphorismServer/src/main/MainController.java new file mode 100644 index 0000000..296ff50 --- /dev/null +++ b/AphorismServer/src/main/MainController.java @@ -0,0 +1,32 @@ +package main; + +import client.Client; +import javafx.fxml.FXML; +import javafx.scene.control.Button; +import javafx.stage.Stage; +import server.Server; + +public class MainController { + @FXML + private Button btnServer; + @FXML + private Button btnClient; + + public void setBtnServer(){ + Server server = new Server(); + Stage stage = new Stage(); + try { + server.start(stage); + } + catch (Exception e){} + } + + public void setBtnClient(){ + Client client = new Client(); + Stage stage = new Stage(); + try { + client.start(stage); + } + catch (Exception e){} + } +} diff --git a/AphorismServer/src/main/main.fxml b/AphorismServer/src/main/main.fxml new file mode 100644 index 0000000..0265f49 --- /dev/null +++ b/AphorismServer/src/main/main.fxml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + diff --git a/AphorismServer/src/server/Aphorism.java b/AphorismServer/src/server/Aphorism.java new file mode 100644 index 0000000..3ba2734 --- /dev/null +++ b/AphorismServer/src/server/Aphorism.java @@ -0,0 +1,19 @@ +package server; + +public class Aphorism { + private String aphorism; + private String author; + + public Aphorism(String aphorism, String author) { + this.aphorism = aphorism; + this.author = author; + } + + public String getAphorism() { + return aphorism; + } + + public String getAuthor() { + return author; + } +} diff --git a/AphorismServer/src/server/Server.java b/AphorismServer/src/server/Server.java new file mode 100644 index 0000000..8feeb4d --- /dev/null +++ b/AphorismServer/src/server/Server.java @@ -0,0 +1,22 @@ +package server; + +import javafx.application.Application; +import javafx.fxml.FXMLLoader; +import javafx.scene.Parent; +import javafx.scene.Scene; +import javafx.stage.Stage; + +public class Server extends Application { + + @Override + public void start(Stage stage) throws Exception{ + Parent root = FXMLLoader.load(getClass().getResource("server.fxml")); + stage.setTitle("Server"); + stage.setScene(new Scene(root)); + stage.show(); + } + + public static void main(String[] args) { + launch(args); + } +} diff --git a/AphorismServer/src/server/ServerController.java b/AphorismServer/src/server/ServerController.java new file mode 100644 index 0000000..3a368b7 --- /dev/null +++ b/AphorismServer/src/server/ServerController.java @@ -0,0 +1,39 @@ +package server; + +import javafx.fxml.FXML; +import javafx.scene.control.Button; +import javafx.scene.control.TextField; + +import java.io.IOException; +import java.net.ServerSocket; +import java.net.Socket; + +public class ServerController{ + + @FXML + private TextField tfState; + @FXML + private Button btnStart; + @FXML + private Button btnStop; + + public void setBtnStart(){ + ServerSocket serverSocket = null; + Socket clientSocket = null; + try { + serverSocket = new ServerSocket(2020); + } + catch (IOException e){ + tfState.setText("Connection error with port 2020"); + } + ServerProcess process = new ServerProcess(serverSocket, clientSocket); + Thread thread = new Thread(process); + thread.setDaemon(true); + thread.start(); + tfState.textProperty().bind(process.messageProperty()); + } + + public void setBtnStop(){ + System.exit(0); + } +} diff --git a/AphorismServer/src/server/ServerProcess.java b/AphorismServer/src/server/ServerProcess.java new file mode 100644 index 0000000..771cb56 --- /dev/null +++ b/AphorismServer/src/server/ServerProcess.java @@ -0,0 +1,107 @@ +package server; + +import javafx.concurrent.Task; +import org.apache.commons.io.FileUtils; +import org.json.JSONArray; +import org.json.JSONObject; + +import java.io.*; +import java.net.ServerSocket; +import java.net.Socket; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.Random; + +public class ServerProcess extends Task { + private ServerSocket serverSocket; + private Socket clientSocket; + private ArrayList aphorisms; + + public ServerProcess(ServerSocket serverSocket, Socket clientSocket) { + this.serverSocket = serverSocket; + this.clientSocket = clientSocket; + this.aphorisms = new ArrayList<>(); + } + + @Override + public Void call(){ + giveAphorism(); + return null; + } + + public File getResourceAsFile() { + try { + InputStream inStream = ClassLoader.getSystemClassLoader() + .getResourceAsStream("server/aphorisms.json"); + if (inStream == null) { + return null; + } + File tempFile = File.createTempFile(String.valueOf(inStream.hashCode()), ".tmp"); + tempFile.deleteOnExit(); + + try (FileOutputStream outStream = new FileOutputStream(tempFile)) { + byte[] buffer = new byte[1024]; + int bytesRead; + while ((bytesRead = inStream.read(buffer)) != -1) { + outStream.write(buffer, 0, bytesRead); + } + } + return tempFile; + } catch (IOException e) { + e.printStackTrace(); + return null; + } + } + + private void getAphorismFromJSON() { + File jsfile = this.getResourceAsFile(); + try { + String content = FileUtils.readFileToString(jsfile, "utf-8"); + JSONObject jsList = new JSONObject(content); + JSONArray jsAphorisms = (JSONArray) jsList.get("aphorisms"); + for (Object obj : jsAphorisms) { + String strAphorism = ((JSONObject) obj).get("aphorism").toString(); + String strAuthor = ((JSONObject) obj).get("author").toString(); + Aphorism aphorism = new Aphorism(strAphorism, strAuthor); + this.aphorisms.add(aphorism); + } + } + catch (IOException e) {} + } + + public void giveAphorism() { + BufferedReader brIn = null; + PrintWriter pwOut = null; + String sInput; + updateMessage("Waiting connection"); + try { + clientSocket = serverSocket.accept(); + updateMessage("Client has connected"); + brIn = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); + pwOut = new PrintWriter(clientSocket.getOutputStream(), true); + while ((sInput = brIn.readLine()) != null) { + if (sInput.equals("exit")) { + updateMessage("Client disconnected. Server stopped"); + brIn.close(); + pwOut.close(); + serverSocket.close(); + clientSocket.close(); + break; + } else if (sInput.equals("aphorism")) { + updateMessage("Client connected"); + this.getAphorismFromJSON(); + Random r = new Random(); + int i = r.nextInt(aphorisms.size()); + String line = aphorisms.get(i).getAphorism().concat(" ") + .concat(aphorisms.get(i).getAuthor()); + System.out.println(line); + pwOut.println(line); + } + } + } + catch (IOException e){ + updateMessage("Can't connect"); + } + } +} diff --git a/AphorismServer/src/server/aphorisms.json b/AphorismServer/src/server/aphorisms.json new file mode 100644 index 0000000..596c870 --- /dev/null +++ b/AphorismServer/src/server/aphorisms.json @@ -0,0 +1,41 @@ +{ + "aphorisms" : + [ + { + "aphorism" : "Без ума жить худо; что ты наживешь без него?", + "author" : "Фонвизин Д. И." + }, + { + "aphorism" : "Блаженство тела состоит в здоровье, блаженство ума — в знании.", + "author" : "Фалес" + }, + { + "aphorism" : "Великие умы обсуждают идеи; средние умы обсуждают события; мелкие умы обсуждают людей.", + "author" : "Элеонор Рузвельт" + }, + { + "aphorism" : "Верный способ судить о характере и уме человека по выбору им книг и друзей.", + "author" : "Гельвеций К." + }, + { + "aphorism" : "Главное в человеке не ум, а то, что им управляет: характер, сердце, добрые чувства.", + "author" : "Ф. М. Достоевский" + }, + { + "aphorism" : "Два основных достояния человеческой природы — это ум и рассуждения.", + "author" : "Плутарх" + }, + { + "aphorism" : "Желающий учить того, кто высокого мнения о своем уме, попусту тратит время.", + "author" : "Демокрит" + }, + { + "aphorism" : "Кому не хватает решительной воли — не хватает ума.", + "author" : "Шекспир У." + }, + { + "aphorism" : "Не красота всякой женщины — золото, а ум и молчание.", + "author" : "Менандр" + } + ] +} \ No newline at end of file diff --git a/AphorismServer/src/server/server.fxml b/AphorismServer/src/server/server.fxml new file mode 100644 index 0000000..1da2fdd --- /dev/null +++ b/AphorismServer/src/server/server.fxml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ServerClock/ServerClock.jar b/ServerClock/ServerClock.jar new file mode 100644 index 0000000..2703b8a Binary files /dev/null and b/ServerClock/ServerClock.jar differ diff --git a/ServerClock/src/client/Client.java b/ServerClock/src/client/Client.java new file mode 100644 index 0000000..837f8cf --- /dev/null +++ b/ServerClock/src/client/Client.java @@ -0,0 +1,22 @@ +package client; + +import javafx.application.Application; +import javafx.fxml.FXMLLoader; +import javafx.scene.Parent; +import javafx.scene.Scene; +import javafx.stage.Stage; + +public class Client extends Application { + + @Override + public void start(Stage stage) throws Exception{ + Parent root = FXMLLoader.load(getClass().getResource("client.fxml")); + stage.setTitle("Client"); + stage.setScene(new Scene(root)); + stage.show(); + } + + public static void main(String[] args) { + launch(args); + } +} diff --git a/ServerClock/src/client/ClientController.java b/ServerClock/src/client/ClientController.java new file mode 100644 index 0000000..71b2d2c --- /dev/null +++ b/ServerClock/src/client/ClientController.java @@ -0,0 +1,66 @@ +package client; + +import javafx.fxml.FXML; + +import javafx.scene.control.Button; +import javafx.scene.control.TextArea; +import javafx.scene.control.TextField; + +import java.io.IOException; +import java.io.PrintWriter; +import java.net.*; + +public class ClientController { + @FXML + private Button btnConnect; + @FXML + private Button btnExit; + @FXML + private TextArea taDisplay; + @FXML + private TextField tfServerIP; + @FXML + private TextField tfState; + + Socket clientSocket = null; + + public void setBtnExit(){ + try { + PrintWriter pwOut = new PrintWriter(this.clientSocket.getOutputStream(), true); + pwOut.println("exit"); + System.exit(0); + } + catch (NullPointerException e){ + tfState.setText("Nothing for disconnect"); + } + catch (IOException e){ + tfState.setText("Disconnection error"); + } + } + + public void getConnect() throws IOException { + String sServerIP = tfServerIP.getText(); + tfState.setText("Connecting with "+sServerIP+"..."); + try{ + this.clientSocket = new Socket(sServerIP,2020); + tfState.setText("Connection with "+sServerIP+" success"); + } + catch (UnknownHostException e){ + tfState.setText("Connection failed: Unknown host"); + } + catch (NoRouteToHostException e){ + tfState.setText("Connection failed: No connection"); + } + catch (ConnectException e){ + tfState.setText("Connection failed: Connection error"); + } + catch (IOException e){ + tfState.setText("Connection failed: Input/output error"); + } + ClientProcess process = new ClientProcess(this.clientSocket); + Thread thread = new Thread(process); + thread.setDaemon(true); + thread.start(); + taDisplay.textProperty().bind(process.messageProperty()); + } +} diff --git a/ServerClock/src/client/ClientProcess.java b/ServerClock/src/client/ClientProcess.java new file mode 100644 index 0000000..a7540ef --- /dev/null +++ b/ServerClock/src/client/ClientProcess.java @@ -0,0 +1,46 @@ +package client; + +import javafx.concurrent.Task; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.PrintWriter; +import java.net.Socket; + +public class ClientProcess extends Task{ + + private Socket clientSocket; + + public ClientProcess(Socket clientSocket) { + this.clientSocket = clientSocket; + } + + @Override + public Void call() { + getTime(); + return null; + } + + public void getTime(){ + BufferedReader brIn = null; + PrintWriter pwOut = null; + String sInput=null; + try{ + brIn = new BufferedReader(new InputStreamReader(this.clientSocket.getInputStream())); + pwOut = new PrintWriter(this.clientSocket.getOutputStream(),true); + } + catch (IOException e) {} + + while (true){ + pwOut.println("time"); + try { + sInput = brIn.readLine(); + updateMessage(sInput); + } + catch (IOException e){} + try {Thread.sleep(1000);} + catch (InterruptedException e){} + } + } +} diff --git a/ServerClock/src/client/client.fxml b/ServerClock/src/client/client.fxml new file mode 100644 index 0000000..a4d122e --- /dev/null +++ b/ServerClock/src/client/client.fxml @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ServerClock/src/main/Main.java b/ServerClock/src/main/Main.java new file mode 100644 index 0000000..e54841f --- /dev/null +++ b/ServerClock/src/main/Main.java @@ -0,0 +1,23 @@ +package main; + +import javafx.application.Application; +import javafx.fxml.FXMLLoader; +import javafx.scene.Parent; +import javafx.scene.Scene; +import javafx.stage.Stage; + +public class Main extends Application { + + @Override + public void start(Stage primaryStage) throws Exception{ + Parent root = FXMLLoader.load(getClass().getResource("main.fxml")); + primaryStage.setTitle("Aphorism server"); + primaryStage.setScene(new Scene(root)); + primaryStage.show(); + } + + + public static void main(String[] args) { + launch(args); + } +} diff --git a/ServerClock/src/main/MainController.java b/ServerClock/src/main/MainController.java new file mode 100644 index 0000000..296ff50 --- /dev/null +++ b/ServerClock/src/main/MainController.java @@ -0,0 +1,32 @@ +package main; + +import client.Client; +import javafx.fxml.FXML; +import javafx.scene.control.Button; +import javafx.stage.Stage; +import server.Server; + +public class MainController { + @FXML + private Button btnServer; + @FXML + private Button btnClient; + + public void setBtnServer(){ + Server server = new Server(); + Stage stage = new Stage(); + try { + server.start(stage); + } + catch (Exception e){} + } + + public void setBtnClient(){ + Client client = new Client(); + Stage stage = new Stage(); + try { + client.start(stage); + } + catch (Exception e){} + } +} diff --git a/ServerClock/src/main/main.fxml b/ServerClock/src/main/main.fxml new file mode 100644 index 0000000..0265f49 --- /dev/null +++ b/ServerClock/src/main/main.fxml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + diff --git a/ServerClock/src/server/Server.java b/ServerClock/src/server/Server.java new file mode 100644 index 0000000..8feeb4d --- /dev/null +++ b/ServerClock/src/server/Server.java @@ -0,0 +1,22 @@ +package server; + +import javafx.application.Application; +import javafx.fxml.FXMLLoader; +import javafx.scene.Parent; +import javafx.scene.Scene; +import javafx.stage.Stage; + +public class Server extends Application { + + @Override + public void start(Stage stage) throws Exception{ + Parent root = FXMLLoader.load(getClass().getResource("server.fxml")); + stage.setTitle("Server"); + stage.setScene(new Scene(root)); + stage.show(); + } + + public static void main(String[] args) { + launch(args); + } +} diff --git a/ServerClock/src/server/ServerController.java b/ServerClock/src/server/ServerController.java new file mode 100644 index 0000000..3a368b7 --- /dev/null +++ b/ServerClock/src/server/ServerController.java @@ -0,0 +1,39 @@ +package server; + +import javafx.fxml.FXML; +import javafx.scene.control.Button; +import javafx.scene.control.TextField; + +import java.io.IOException; +import java.net.ServerSocket; +import java.net.Socket; + +public class ServerController{ + + @FXML + private TextField tfState; + @FXML + private Button btnStart; + @FXML + private Button btnStop; + + public void setBtnStart(){ + ServerSocket serverSocket = null; + Socket clientSocket = null; + try { + serverSocket = new ServerSocket(2020); + } + catch (IOException e){ + tfState.setText("Connection error with port 2020"); + } + ServerProcess process = new ServerProcess(serverSocket, clientSocket); + Thread thread = new Thread(process); + thread.setDaemon(true); + thread.start(); + tfState.textProperty().bind(process.messageProperty()); + } + + public void setBtnStop(){ + System.exit(0); + } +} diff --git a/ServerClock/src/server/ServerProcess.java b/ServerClock/src/server/ServerProcess.java new file mode 100644 index 0000000..c24a6a6 --- /dev/null +++ b/ServerClock/src/server/ServerProcess.java @@ -0,0 +1,61 @@ +package server; + +import javafx.concurrent.Task; + +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.text.SimpleDateFormat; +import java.util.Date; + +public class ServerProcess extends Task { + private ServerSocket serverSocket; + private Socket clientSocket; + + public ServerProcess(ServerSocket serverSocket, Socket clientSocket) { + this.serverSocket = serverSocket; + this.clientSocket = clientSocket; + } + + @Override + public Void call(){ + giveTime(); + return null; + } + + private String getNowTime(){ + SimpleDateFormat sdf = new SimpleDateFormat("hh:mm:ss"); + return sdf.format(new Date()); + } + + private void giveTime() { + BufferedReader brIn = null; + PrintWriter pwOut = null; + String sInput; + updateMessage("Waiting connection"); + try { + clientSocket = serverSocket.accept(); + updateMessage("Client has connected"); + brIn = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); + pwOut = new PrintWriter(clientSocket.getOutputStream(), true); + while ((sInput = brIn.readLine()) != null) { + if (sInput.equals("exit")) { + updateMessage("Client disconnected. Server stopped"); + brIn.close(); + pwOut.close(); + serverSocket.close(); + clientSocket.close(); + break; + } else if (sInput.equals("time")) { + pwOut.println(getNowTime()); + } + } + } + catch (IOException e){ + updateMessage("Can't connect"); + } + } +} diff --git a/ServerClock/src/server/server.fxml b/ServerClock/src/server/server.fxml new file mode 100644 index 0000000..1da2fdd --- /dev/null +++ b/ServerClock/src/server/server.fxml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +