diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..e7e9d11
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,2 @@
+# Default ignored files
+/workspace.xml
diff --git a/.idea/Java-lab-6.iml b/.idea/Java-lab-6.iml
new file mode 100644
index 0000000..d6ebd48
--- /dev/null
+++ b/.idea/Java-lab-6.iml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
new file mode 100644
index 0000000..bdaa776
--- /dev/null
+++ b/.idea/compiler.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/lab6.iml b/.idea/lab6.iml
new file mode 100644
index 0000000..78b2cc5
--- /dev/null
+++ b/.idea/lab6.iml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..0b7810f
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..07e6150
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml
new file mode 100644
index 0000000..e96534f
--- /dev/null
+++ b/.idea/uiDesigner.xml
@@ -0,0 +1,124 @@
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..35eb1dd
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/lab6.iml b/lab6.iml
new file mode 100644
index 0000000..78b2cc5
--- /dev/null
+++ b/lab6.iml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..6833a1a
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,59 @@
+
+
+ 4.0.0
+
+ org.example
+ lab6
+ 1.0-SNAPSHOT
+
+
+
+
+ org.openjfx
+ javafx-maven-plugin
+ 0.0.4
+
+ task1.client.ui.MainApp
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+ 13
+ 13
+
+
+
+
+
+
+
+
+
+ org.openjfx
+ javafx-controls
+ 14
+
+
+ org.openjfx
+ javafx-fxml
+ 15-ea+6
+
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+ 2.11.0
+
+
+ org.apache.commons
+ commons-lang3
+ 3.10
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/task1/client/Client.java b/src/main/java/task1/client/Client.java
new file mode 100644
index 0000000..54ec72e
--- /dev/null
+++ b/src/main/java/task1/client/Client.java
@@ -0,0 +1,24 @@
+package task1.client;
+
+import java.io.*;
+import java.net.Socket;
+import java.util.Date;
+
+public class Client {
+
+ public Date getDateFromServer() {
+ String date = "";
+ try (Socket socket = new Socket("localhost", 8080);
+ OutputStream output = socket.getOutputStream();
+ PrintWriter writer = new PrintWriter(output, true);
+ InputStream input = socket.getInputStream();
+ BufferedReader reader = new BufferedReader(new InputStreamReader(input))) {
+ System.out.println();
+ writer.println("getDate");
+ date = reader.readLine();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ return new Date(Long.parseLong(date));
+ }
+}
diff --git a/src/main/java/task1/client/ui/Controller.java b/src/main/java/task1/client/ui/Controller.java
new file mode 100644
index 0000000..bb574ef
--- /dev/null
+++ b/src/main/java/task1/client/ui/Controller.java
@@ -0,0 +1,21 @@
+package task1.client.ui;
+
+import javafx.fxml.FXML;
+import javafx.scene.control.Button;
+import task1.client.Client;
+
+public class Controller {
+
+ @FXML
+ private DigitalClock digitalClock;
+
+ @FXML
+ private Button button;
+
+ private Client client = new Client();
+
+
+ public void click() {
+ digitalClock.setTime(client.getDateFromServer());
+ }
+}
diff --git a/src/main/java/task1/client/ui/DigitalClock.java b/src/main/java/task1/client/ui/DigitalClock.java
new file mode 100644
index 0000000..a570065
--- /dev/null
+++ b/src/main/java/task1/client/ui/DigitalClock.java
@@ -0,0 +1,68 @@
+package task1.client.ui;
+
+import javafx.beans.property.SimpleStringProperty;
+import javafx.beans.property.StringProperty;
+import javafx.scene.canvas.Canvas;
+import javafx.scene.canvas.GraphicsContext;
+import javafx.scene.layout.StackPane;
+import javafx.scene.paint.Color;
+import javafx.scene.text.Font;
+import javafx.scene.text.FontWeight;
+import javafx.scene.text.Text;
+
+import java.util.Calendar;
+import java.util.Date;
+import java.util.GregorianCalendar;
+
+public class DigitalClock extends StackPane {
+
+ private Canvas canvas = new Canvas();
+
+ private GraphicsContext gc = canvas.getGraphicsContext2D();
+
+ private Text text = new Text("");
+
+ private StringProperty timeNow = new SimpleStringProperty();
+
+ public DigitalClock() {
+ this.setWidth(100);
+ this.setHeight(50);
+ canvas.setWidth(this.getWidth());
+ canvas.setHeight(this.getHeight());
+ text.setFill(Color.WHITE);
+ text.setFont(Font.font("null", FontWeight.BOLD, 15));
+ timeNow.setValue("00:00:00");
+ text.textProperty().bind(timeNow);
+
+ getChildren().addAll(canvas, text);
+
+ paintClock();
+ }
+
+ public void setTime(Date date) {
+ Calendar calendar = GregorianCalendar.getInstance();
+ calendar.setTime(date);
+ //Здесь дописать дату через calendar.get
+ timeNow.setValue(zero(calendar.get(Calendar.HOUR)) + ":" + zero(calendar.get(Calendar.MINUTE)) + ":" + zero(calendar.get(Calendar.SECOND)) + ":" + zero(calendar.get(Calendar.YEAR)));
+ }
+
+ private void paintClock() {
+ gc.clearRect(0, 0, getWidth(), getHeight());
+
+ gc.setFill(Color.FIREBRICK);
+ gc.fillRoundRect(0, 0, getWidth(), getHeight(), 25, 25);
+ }
+
+ private String zero(int number) {
+ return (number < 10) ? "0" + number : "" + number;
+ }
+
+ public void setHeight(double height) {
+ super.setHeight(height);
+ }
+
+ public void setWidth(double width) {
+ super.setWidth(width);
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/task1/client/ui/MainApp.java b/src/main/java/task1/client/ui/MainApp.java
new file mode 100644
index 0000000..8165e54
--- /dev/null
+++ b/src/main/java/task1/client/ui/MainApp.java
@@ -0,0 +1,24 @@
+package task1.client.ui;
+
+import javafx.application.Application;
+import javafx.fxml.FXMLLoader;
+import javafx.scene.Scene;
+import javafx.scene.layout.AnchorPane;
+import javafx.stage.Stage;
+
+public class MainApp extends Application {
+
+ public static void main(String[] args) {
+ launch(args);
+ }
+
+ @Override
+ public void start(Stage stage) throws Exception {
+ String fxmlFile = "/task1/fxml/app.fxml";
+ FXMLLoader loader = new FXMLLoader();
+ AnchorPane root = loader.load(getClass().getResourceAsStream(fxmlFile));
+ stage.setTitle("Lab6. Task 1");
+ stage.setScene(new Scene(root));
+ stage.show();
+ }
+}
diff --git a/src/main/java/task1/server/Server.java b/src/main/java/task1/server/Server.java
new file mode 100644
index 0000000..bcd1958
--- /dev/null
+++ b/src/main/java/task1/server/Server.java
@@ -0,0 +1,38 @@
+package task1.server;
+
+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.util.Date;
+
+public class Server {
+
+ public static void main(String[] args) {
+ startServer();
+ }
+
+ public static void startServer() {
+ try (ServerSocket serverSocket = new ServerSocket(8080)) {
+ while (true) {
+ Socket clientSocket = serverSocket.accept();
+ System.out.println("New client connected");
+ PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
+ BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
+
+ String text = in.readLine();
+ if(!"getDate".equals(text)){
+ System.out.println("Unknown message from client");
+ continue;
+ }
+
+ System.out.println("Incoming request: " + text);
+ out.println(new Date().getTime());
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+}
diff --git a/src/main/java/task2/client/AphorismsClient.java b/src/main/java/task2/client/AphorismsClient.java
new file mode 100644
index 0000000..a828d91
--- /dev/null
+++ b/src/main/java/task2/client/AphorismsClient.java
@@ -0,0 +1,22 @@
+package task2.client;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.Socket;
+
+public class AphorismsClient {
+ public static void main(String[] args) {
+ try (Socket socket = new Socket("localhost", 8080);
+ InputStream input = socket.getInputStream();
+ BufferedReader reader = new BufferedReader(new InputStreamReader(input))) {
+ while (true) {
+ String aphorism = reader.readLine();
+ System.out.println("Received aphorism: " + aphorism);
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+}
diff --git a/src/main/java/task2/server/AphorismSender.java b/src/main/java/task2/server/AphorismSender.java
new file mode 100644
index 0000000..5a2ffb9
--- /dev/null
+++ b/src/main/java/task2/server/AphorismSender.java
@@ -0,0 +1,63 @@
+package task2.server;
+
+
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.*;
+
+public class AphorismSender extends Thread {
+
+ private List clients = Collections.synchronizedList(new LinkedList<>());
+ private ObjectMapper objectMapper = new ObjectMapper();
+ private List aphorisms = new ArrayList<>();
+
+ public AphorismSender() {
+ readAphorisms();
+ this.start();
+ }
+
+ @Override
+ public void run() {
+ while (true) {
+ String randomAphorism = getRandomAphorism();
+ for (int i = 0; i < clients.size(); i++) {
+ ClientHolder client = clients.get(i);
+ client.getOut().println(randomAphorism);
+ try {
+ sleep(2000);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ try {
+ client.getSocket().close();
+ } catch (IOException ex) {
+ ex.printStackTrace();
+ }
+ }
+ }
+ }
+ }
+
+ public void addClient(ClientHolder client) {
+ this.clients.add(client);
+ }
+
+ private void readAphorisms() {
+ InputStream file = this.getClass().getClassLoader()
+ .getResourceAsStream("task2/aphorisms.json");
+ try {
+ aphorisms = objectMapper.readValue(file, new TypeReference<>() {
+ });
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ private String getRandomAphorism() {
+ Random random = new Random();
+ return aphorisms.get(random.nextInt(aphorisms.size()));
+ }
+
+}
diff --git a/src/main/java/task2/server/AphorismsServer.java b/src/main/java/task2/server/AphorismsServer.java
new file mode 100644
index 0000000..0170104
--- /dev/null
+++ b/src/main/java/task2/server/AphorismsServer.java
@@ -0,0 +1,32 @@
+package task2.server;
+
+import java.io.IOException;
+import java.net.ServerSocket;
+import java.net.Socket;
+
+public class AphorismsServer {
+
+ private static AphorismSender aphorismSender = new AphorismSender();
+
+ public static void main(String[] args) {
+ startServer();
+ }
+
+ public static void startServer() {
+ System.out.println("Aphorism server started");
+ try (ServerSocket serverSocket = new ServerSocket(8080)) {
+ while (true) {
+ Socket clientSocket = serverSocket.accept();
+ System.out.println("New client connected");
+ try {
+ aphorismSender.addClient(new ClientHolder(clientSocket));
+ } catch (IOException e) {
+ clientSocket.close();
+ }
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+}
diff --git a/src/main/java/task2/server/ClientHolder.java b/src/main/java/task2/server/ClientHolder.java
new file mode 100644
index 0000000..64f39cc
--- /dev/null
+++ b/src/main/java/task2/server/ClientHolder.java
@@ -0,0 +1,22 @@
+package task2.server;
+
+import java.io.*;
+import java.net.Socket;
+
+public class ClientHolder {
+ private final PrintWriter out;
+ private final Socket socket;
+
+ public ClientHolder(Socket socket) throws IOException {
+ this.socket = socket;
+ out = new PrintWriter(socket.getOutputStream(), true);
+ }
+
+ public Socket getSocket() {
+ return socket;
+ }
+
+ public PrintWriter getOut() {
+ return out;
+ }
+}
diff --git a/src/main/java/task3/Event.java b/src/main/java/task3/Event.java
new file mode 100644
index 0000000..2f87717
--- /dev/null
+++ b/src/main/java/task3/Event.java
@@ -0,0 +1,37 @@
+package task3;
+
+import java.io.Serializable;
+import java.util.Date;
+
+public class Event implements Serializable {
+ private final Date date;
+ private final String message;
+ private final int id;
+
+ public Event(int id, Date date, String message) {
+ this.date = date;
+ this.message = message;
+ this.id = id;
+ }
+
+ public Date getDate() {
+ return date;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public int getId() {
+ return id;
+ }
+
+ @Override
+ public String toString() {
+ return "Event{" +
+ "date=" + date +
+ ", message='" + message + '\'' +
+ ", id=" + id +
+ '}';
+ }
+}
diff --git a/src/main/java/task3/client/EventsClient.java b/src/main/java/task3/client/EventsClient.java
new file mode 100644
index 0000000..1a2d2b0
--- /dev/null
+++ b/src/main/java/task3/client/EventsClient.java
@@ -0,0 +1,27 @@
+package task3.client;
+
+import task3.Event;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.ObjectInputStream;
+import java.net.Socket;
+
+public class EventsClient {
+ public static void main(String[] args) {
+ try (Socket socket = new Socket("localhost", 8080);
+ InputStream input = socket.getInputStream();
+ ObjectInputStream reader = new ObjectInputStream(input)) {
+ while (true) {
+ try {
+ Event event = (Event) reader.readObject();
+ System.out.println("Received event for client: " + event.getId() + ", date: " + event.getDate() + " message: " + event.getMessage());
+ } catch (ClassNotFoundException e) {
+ e.printStackTrace();
+ }
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+}
diff --git a/src/main/java/task3/server/ClientHolder.java b/src/main/java/task3/server/ClientHolder.java
new file mode 100644
index 0000000..2ac59cc
--- /dev/null
+++ b/src/main/java/task3/server/ClientHolder.java
@@ -0,0 +1,28 @@
+package task3.server;
+
+import java.io.*;
+import java.net.Socket;
+
+public class ClientHolder {
+ private final ObjectOutputStream out;
+ private final int id;
+ private final Socket socket;
+
+ public ClientHolder(Socket socket, int id) throws IOException {
+ this.socket = socket;
+ out = new ObjectOutputStream(socket.getOutputStream());
+ this.id = id;
+ }
+
+ public Socket getSocket() {
+ return socket;
+ }
+
+ public ObjectOutputStream getOut() {
+ return out;
+ }
+
+ public int getId() {
+ return id;
+ }
+}
diff --git a/src/main/java/task3/server/EventsSender.java b/src/main/java/task3/server/EventsSender.java
new file mode 100644
index 0000000..8c5bb6b
--- /dev/null
+++ b/src/main/java/task3/server/EventsSender.java
@@ -0,0 +1,52 @@
+package task3.server;
+
+import org.apache.commons.lang3.RandomStringUtils;
+import task3.Event;
+
+import java.io.IOException;
+import java.util.Date;
+import java.util.Map;
+import java.util.Random;
+import java.util.concurrent.ConcurrentHashMap;
+
+public class EventsSender extends Thread {
+ // Почитать про HashMap
+ private Map clients = new ConcurrentHashMap<>();
+
+ public EventsSender() {
+ this.start();
+ }
+
+ @Override
+ public void run() {
+ while (true) {
+ if (clients.size() != 0) {
+ Event event = generateRandomEvent();
+ ClientHolder client = clients.get(event.getId());
+ try {
+ client.getOut().writeObject(event);
+ sleep(3000);
+ } catch (IOException e) {
+ e.printStackTrace();
+ } catch (InterruptedException e) {
+ try {
+ client.getSocket().close();
+ } catch (IOException ex) {
+ ex.printStackTrace();
+ }
+ }
+ }
+ }
+ }
+
+ public void addClient(ClientHolder client) {
+ this.clients.put(client.getId(), client);
+ }
+
+ private Event generateRandomEvent() {
+ Random random = new Random();
+ int id = random.nextInt(clients.size());
+ System.out.println("Generated event for: " + id);
+ return new Event(id, new Date(), "Event: " + RandomStringUtils.randomAlphanumeric(10));
+ }
+}
diff --git a/src/main/java/task3/server/EventsServer.java b/src/main/java/task3/server/EventsServer.java
new file mode 100644
index 0000000..fde0855
--- /dev/null
+++ b/src/main/java/task3/server/EventsServer.java
@@ -0,0 +1,33 @@
+package task3.server;
+
+import java.io.IOException;
+import java.net.ServerSocket;
+import java.net.Socket;
+
+
+public class EventsServer {
+ private static EventsSender eventsSender = new EventsSender();
+
+ public static void main(String[] args) {
+ startServer();
+ }
+
+ public static void startServer() {
+ int clientId = 0;
+ try (ServerSocket serverSocket = new ServerSocket(8080)) {
+ System.out.println("Events server started");
+ while (true) {
+ Socket clientSocket = serverSocket.accept();
+ try {
+ System.out.println("New client with id: " + clientId + " connected");
+ eventsSender.addClient(new ClientHolder(clientSocket, clientId));
+ clientId++;
+ } catch (IOException e) {
+ clientSocket.close();
+ }
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+}
diff --git a/src/main/java/task4/CurrencyExchange.java b/src/main/java/task4/CurrencyExchange.java
new file mode 100644
index 0000000..a5e1dd3
--- /dev/null
+++ b/src/main/java/task4/CurrencyExchange.java
@@ -0,0 +1,37 @@
+package task4;
+
+import java.io.Serializable;
+import java.util.Currency;
+import java.util.Objects;
+
+public class CurrencyExchange implements Serializable {
+ private final Currency from;
+ private final Currency to;
+
+ public CurrencyExchange(Currency from, Currency to) {
+ this.from = from;
+ this.to = to;
+ }
+
+ public Currency getFrom() {
+ return from;
+ }
+
+ public Currency getTo() {
+ return to;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ CurrencyExchange exchange = (CurrencyExchange) o;
+ return from.equals(exchange.from) &&
+ to.equals(exchange.to);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(from, to);
+ }
+}
diff --git a/src/main/java/task4/client/CurrencyClient.java b/src/main/java/task4/client/CurrencyClient.java
new file mode 100644
index 0000000..57ed38a
--- /dev/null
+++ b/src/main/java/task4/client/CurrencyClient.java
@@ -0,0 +1,34 @@
+package task4.client;
+
+import task4.CurrencyExchange;
+
+import java.io.*;
+import java.net.Socket;
+import java.util.Currency;
+
+public class CurrencyClient {
+ public static void main(String[] args) {
+ String currencyRate = getCurrencyRate("RUB", "EUR");
+ System.out.println(currencyRate);
+ String currencyRate2 = getCurrencyRate("RUB", "CAD");
+ System.out.println(currencyRate2);
+ }
+
+ public static String getCurrencyRate(String from, String to) {
+ String rate = "";
+ try (Socket socket = new Socket("localhost", 8080);
+ OutputStream output = socket.getOutputStream();
+ ObjectOutputStream out = new ObjectOutputStream(output);
+ InputStream input = socket.getInputStream();
+ ObjectInputStream reader = new ObjectInputStream(input)) {
+
+ out.writeObject(new CurrencyExchange(Currency.getInstance(from), Currency.getInstance(to)));
+
+ Object obj = reader.readObject();
+ rate = String.valueOf(obj);
+ } catch (IOException | ClassNotFoundException e) {
+ e.printStackTrace();
+ }
+ return rate;
+ }
+}
diff --git a/src/main/java/task4/server/CurrencyRates.java b/src/main/java/task4/server/CurrencyRates.java
new file mode 100644
index 0000000..328517b
--- /dev/null
+++ b/src/main/java/task4/server/CurrencyRates.java
@@ -0,0 +1,30 @@
+package task4.server;
+
+import task4.CurrencyExchange;
+
+import java.util.Currency;
+import java.util.HashMap;
+import java.util.Map;
+
+public class CurrencyRates {
+ private static Map currencyRates = new HashMap<>();
+
+ static {
+ currencyRates.put(new CurrencyExchange(Currency.getInstance("RUB"), Currency.getInstance("RUB")), 1.0);
+ currencyRates.put(new CurrencyExchange(Currency.getInstance("USD"), Currency.getInstance("USD")), 1.0);
+ currencyRates.put(new CurrencyExchange(Currency.getInstance("EUR"), Currency.getInstance("EUR")), 1.0);
+
+ currencyRates.put(new CurrencyExchange(Currency.getInstance("RUB"), Currency.getInstance("USD")), 0.014428);
+ currencyRates.put(new CurrencyExchange(Currency.getInstance("USD"), Currency.getInstance("RUB")), 69.290252);
+
+ currencyRates.put(new CurrencyExchange(Currency.getInstance("RUB"), Currency.getInstance("EUR")), 0.012810);
+ currencyRates.put(new CurrencyExchange(Currency.getInstance("EUR"), Currency.getInstance("RUB")), 78.061927);
+
+ currencyRates.put(new CurrencyExchange(Currency.getInstance("USD"), Currency.getInstance("EUR")), 0.887865);
+ currencyRates.put(new CurrencyExchange(Currency.getInstance("EUR"), Currency.getInstance("USD")), 1.126526);
+ }
+
+ public static double getRate(CurrencyExchange currencyExchange) {
+ return currencyRates.getOrDefault(currencyExchange, 0.0);
+ }
+}
diff --git a/src/main/java/task4/server/CurrencyServer.java b/src/main/java/task4/server/CurrencyServer.java
new file mode 100644
index 0000000..4d3eba7
--- /dev/null
+++ b/src/main/java/task4/server/CurrencyServer.java
@@ -0,0 +1,45 @@
+package task4.server;
+
+import task4.CurrencyExchange;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.net.ServerSocket;
+import java.net.Socket;
+
+public class CurrencyServer {
+
+ public static void main(String[] args) {
+ startServer();
+ }
+
+ public static void startServer() {
+ try (ServerSocket serverSocket = new ServerSocket(8080)) {
+ System.out.println("Currency server started");
+ while (true) {
+ Socket clientSocket = serverSocket.accept();
+ System.out.println("New client connected");
+ new Thread(() -> {
+ try {
+ ObjectOutputStream out = new ObjectOutputStream(clientSocket.getOutputStream());
+ ObjectInputStream in = new ObjectInputStream(clientSocket.getInputStream());
+
+ CurrencyExchange exchange = (CurrencyExchange) in.readObject();
+ double rate = CurrencyRates.getRate(exchange);
+ System.out.println("Found rate: " + rate);
+ if(rate == 0.0){
+ out.writeObject("Unknown currency exchange");
+ } else {
+ out.writeObject(rate);
+ }
+ } catch (IOException | ClassNotFoundException e) {
+ e.printStackTrace();
+ }
+ }).start();
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+}
diff --git a/src/main/resources/task1/fxml/app.fxml b/src/main/resources/task1/fxml/app.fxml
new file mode 100644
index 0000000..810a388
--- /dev/null
+++ b/src/main/resources/task1/fxml/app.fxml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/resources/task2/aphorisms.json b/src/main/resources/task2/aphorisms.json
new file mode 100644
index 0000000..6f44815
--- /dev/null
+++ b/src/main/resources/task2/aphorisms.json
@@ -0,0 +1,10 @@
+[
+ "Победу над собой отметить приятно с тем, кто побеждён",
+ "Если мы так мало знаем о жизни, что можем мы знать о смерти?",
+ "Всегда кажется, что нас любят за то, что мы хороши. А не догадываемся, что любят нас оттого, что хороши те, кто нас любит.",
+ "Настоящий друг с тобой, когда ты не прав. Когда ты прав, всякий будет с тобой.",
+ "Как сказал мой дед - я твой дед",
+ "Волк слабее льва, но в цирке не выступает",
+ "Падение это не провал, падение это где упал",
+ "Волк не волк если он не волк"
+]
\ No newline at end of file
diff --git a/target/classes/META-INF/lab6.kotlin_module b/target/classes/META-INF/lab6.kotlin_module
new file mode 100644
index 0000000..a49347a
Binary files /dev/null and b/target/classes/META-INF/lab6.kotlin_module differ
diff --git a/target/classes/task1/client/Client.class b/target/classes/task1/client/Client.class
new file mode 100644
index 0000000..10ef297
Binary files /dev/null and b/target/classes/task1/client/Client.class differ
diff --git a/target/classes/task1/client/ui/Controller.class b/target/classes/task1/client/ui/Controller.class
new file mode 100644
index 0000000..dcab197
Binary files /dev/null and b/target/classes/task1/client/ui/Controller.class differ
diff --git a/target/classes/task1/client/ui/DigitalClock.class b/target/classes/task1/client/ui/DigitalClock.class
new file mode 100644
index 0000000..e1b2ddd
Binary files /dev/null and b/target/classes/task1/client/ui/DigitalClock.class differ
diff --git a/target/classes/task1/client/ui/MainApp.class b/target/classes/task1/client/ui/MainApp.class
new file mode 100644
index 0000000..62b0098
Binary files /dev/null and b/target/classes/task1/client/ui/MainApp.class differ
diff --git a/target/classes/task1/fxml/app.fxml b/target/classes/task1/fxml/app.fxml
new file mode 100644
index 0000000..810a388
--- /dev/null
+++ b/target/classes/task1/fxml/app.fxml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/target/classes/task1/server/Server.class b/target/classes/task1/server/Server.class
new file mode 100644
index 0000000..ac195cd
Binary files /dev/null and b/target/classes/task1/server/Server.class differ
diff --git a/target/classes/task2/aphorisms.json b/target/classes/task2/aphorisms.json
new file mode 100644
index 0000000..6f44815
--- /dev/null
+++ b/target/classes/task2/aphorisms.json
@@ -0,0 +1,10 @@
+[
+ "Победу над собой отметить приятно с тем, кто побеждён",
+ "Если мы так мало знаем о жизни, что можем мы знать о смерти?",
+ "Всегда кажется, что нас любят за то, что мы хороши. А не догадываемся, что любят нас оттого, что хороши те, кто нас любит.",
+ "Настоящий друг с тобой, когда ты не прав. Когда ты прав, всякий будет с тобой.",
+ "Как сказал мой дед - я твой дед",
+ "Волк слабее льва, но в цирке не выступает",
+ "Падение это не провал, падение это где упал",
+ "Волк не волк если он не волк"
+]
\ No newline at end of file
diff --git a/target/classes/task2/client/AphorismsClient.class b/target/classes/task2/client/AphorismsClient.class
new file mode 100644
index 0000000..3ee2c0a
Binary files /dev/null and b/target/classes/task2/client/AphorismsClient.class differ
diff --git a/target/classes/task2/server/AphorismSender$1.class b/target/classes/task2/server/AphorismSender$1.class
new file mode 100644
index 0000000..3540776
Binary files /dev/null and b/target/classes/task2/server/AphorismSender$1.class differ
diff --git a/target/classes/task2/server/AphorismSender.class b/target/classes/task2/server/AphorismSender.class
new file mode 100644
index 0000000..b15e948
Binary files /dev/null and b/target/classes/task2/server/AphorismSender.class differ
diff --git a/target/classes/task2/server/AphorismsServer.class b/target/classes/task2/server/AphorismsServer.class
new file mode 100644
index 0000000..d5b3b1e
Binary files /dev/null and b/target/classes/task2/server/AphorismsServer.class differ
diff --git a/target/classes/task2/server/ClientHolder.class b/target/classes/task2/server/ClientHolder.class
new file mode 100644
index 0000000..5277853
Binary files /dev/null and b/target/classes/task2/server/ClientHolder.class differ
diff --git a/target/classes/task3/Event.class b/target/classes/task3/Event.class
new file mode 100644
index 0000000..0a43c07
Binary files /dev/null and b/target/classes/task3/Event.class differ
diff --git a/target/classes/task3/client/EventsClient.class b/target/classes/task3/client/EventsClient.class
new file mode 100644
index 0000000..6f9be23
Binary files /dev/null and b/target/classes/task3/client/EventsClient.class differ
diff --git a/target/classes/task3/server/ClientHolder.class b/target/classes/task3/server/ClientHolder.class
new file mode 100644
index 0000000..90792bb
Binary files /dev/null and b/target/classes/task3/server/ClientHolder.class differ
diff --git a/target/classes/task3/server/EventsSender.class b/target/classes/task3/server/EventsSender.class
new file mode 100644
index 0000000..a8c3aa5
Binary files /dev/null and b/target/classes/task3/server/EventsSender.class differ
diff --git a/target/classes/task3/server/EventsServer.class b/target/classes/task3/server/EventsServer.class
new file mode 100644
index 0000000..5136bd4
Binary files /dev/null and b/target/classes/task3/server/EventsServer.class differ
diff --git a/target/classes/task4/CurrencyExchange.class b/target/classes/task4/CurrencyExchange.class
new file mode 100644
index 0000000..3c253ce
Binary files /dev/null and b/target/classes/task4/CurrencyExchange.class differ
diff --git a/target/classes/task4/client/CurrencyClient.class b/target/classes/task4/client/CurrencyClient.class
new file mode 100644
index 0000000..238ebbc
Binary files /dev/null and b/target/classes/task4/client/CurrencyClient.class differ
diff --git a/target/classes/task4/server/CurrencyRates.class b/target/classes/task4/server/CurrencyRates.class
new file mode 100644
index 0000000..32f7079
Binary files /dev/null and b/target/classes/task4/server/CurrencyRates.class differ
diff --git a/target/classes/task4/server/CurrencyServer.class b/target/classes/task4/server/CurrencyServer.class
new file mode 100644
index 0000000..e451a33
Binary files /dev/null and b/target/classes/task4/server/CurrencyServer.class differ
diff --git a/target/lab6-1.0-SNAPSHOT.jar b/target/lab6-1.0-SNAPSHOT.jar
new file mode 100644
index 0000000..a5014bb
Binary files /dev/null and b/target/lab6-1.0-SNAPSHOT.jar differ
diff --git a/target/maven-archiver/pom.properties b/target/maven-archiver/pom.properties
new file mode 100644
index 0000000..69bb53f
--- /dev/null
+++ b/target/maven-archiver/pom.properties
@@ -0,0 +1,5 @@
+#Generated by Maven
+#Wed Jun 24 14:53:13 MSK 2020
+groupId=org.example
+artifactId=lab6
+version=1.0-SNAPSHOT
diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
new file mode 100644
index 0000000..8996ce2
--- /dev/null
+++ b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
@@ -0,0 +1,5 @@
+task1\server\Server.class
+task1\client\ui\Controller.class
+task1\client\Client.class
+task1\client\ui\MainApp.class
+task1\client\ui\DigitalClock.class
diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
new file mode 100644
index 0000000..bcfc6d6
--- /dev/null
+++ b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
@@ -0,0 +1,5 @@
+C:\Users\RTCCD\IdeaProjects\lab6\src\main\java\task1\client\ui\MainApp.java
+C:\Users\RTCCD\IdeaProjects\lab6\src\main\java\task1\server\Server.java
+C:\Users\RTCCD\IdeaProjects\lab6\src\main\java\task1\client\Client.java
+C:\Users\RTCCD\IdeaProjects\lab6\src\main\java\task1\client\ui\Controller.java
+C:\Users\RTCCD\IdeaProjects\lab6\src\main\java\task1\client\ui\DigitalClock.java
diff --git a/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst b/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst
new file mode 100644
index 0000000..e69de29