Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions Lesson2/Client/history/Toha.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Anton: привет димас
Dmitry: че как
10 changes: 10 additions & 0 deletions Lesson2/Client/history/dimas.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
Dmitry: привет
Anton: привет димас
Dmitry: че как
Dmitry: ds
Dmitry: q
Dmitry: w
Dmitry: e
Dmitry: r
Dmitry: t
Dmitry: g
47 changes: 46 additions & 1 deletion Lesson2/Client/src/main/java/Client.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
import java.io.*;
import java.net.Socket;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import java.util.List;

public class Client {
private Socket socket;
Expand All @@ -9,9 +14,12 @@ public class Client {
private Callback<String> callOnChangeClientList;
private Callback<String> callOnAuth;
private Callback<String> callOnError;
private Path pathHistory;

Thread readerMessages;

private static final int PRELOAD_CHAT_ROWS = 100;

public void connect() {
try {
socket = new Socket("localhost",8189);
Expand Down Expand Up @@ -51,9 +59,13 @@ else if (message.startsWith("/clients")){
//сообщения об ошибках
else if (message.startsWith("/error")){
}
//не служебные сообщения (в чат)
//не служебные сообщения (в чат) и историю
else {
callOnMsgReceived.callback(message);
//пишем строку в конец файла, не очищая его
Files.write(pathHistory, (message+"\n").getBytes(),
StandardOpenOption.CREATE, StandardOpenOption.APPEND,
StandardOpenOption.WRITE);
}
}
} catch (IOException e) {
Expand Down Expand Up @@ -118,4 +130,37 @@ public void setCallOnAuth(Callback<String> callOnAuth) {
public void setCallOnError(Callback<String> callOnError) {
this.callOnError = callOnError;
}

public void setPathHistory(String login) {
String dir = "Client/history/" + login + ".txt";
pathHistory = Paths.get(dir);

//заранее создадим промежуточную директорию history, если ее еще нет
try {
Files.createDirectories(pathHistory.getParent());
} catch (IOException e) {
e.printStackTrace();
}
}

public String getHistory(String login){
setPathHistory(login);

try {
List<String> lines = Files.readAllLines(pathHistory);
//обрезаем до 100 последних строк
if (lines.size() > PRELOAD_CHAT_ROWS)
lines = lines.subList(lines.size()-PRELOAD_CHAT_ROWS, lines.size());

//приводим к одной строке, подходящей для вывода в чат
StringBuilder result = new StringBuilder();
for (String line : lines) {
result.append(line).append("\n");
}
return result.toString();
} catch (IOException e) {
e.printStackTrace();
}
return "";
}
}
5 changes: 5 additions & 0 deletions Lesson2/Client/src/main/java/ClientUI.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ public class ClientUI extends JFrame {
private JPanel loginPanel;
private Client clientNetwork = new Client();

private String lastLogin;

public ClientUI() {
setCallbacks();
setMainFrame();
Expand All @@ -46,6 +48,8 @@ private void setCallbacks() {
loginPanel.setVisible(false);
add(chatPanel, BorderLayout.CENTER);
chatPanel.setVisible(true);
//загружаем чат из истории
areaChat.setText(clientNetwork.getHistory(lastLogin));
});

// при сообщении об ошибке показываем pop-up
Expand Down Expand Up @@ -160,6 +164,7 @@ private void initAuthUI() {
clientNetwork.sendMessage("/auth " +
loginField.getText() + " " +
String.valueOf(passwordField.getPassword()));
lastLogin = loginField.getText();
loginField.setText("");
passwordField.setText("");
});
Expand Down