Files
VisualSapfor/src/_VisualDVM/Passes/Server/RepositoryPass.java

99 lines
3.7 KiB
Java
Raw Normal View History

2024-10-14 12:14:01 +03:00
package _VisualDVM.Passes.Server;
import Common.Database.RepositoryRefuseException;
2024-10-14 15:19:13 +03:00
import Common.Passes.Pass;
import Common.Passes.PassException;
import _VisualDVM.Constants;
import _VisualDVM.Global;
2024-10-09 22:21:57 +03:00
import _VisualDVM.Repository.RepositoryServer;
import _VisualDVM.Repository.Server.ServerCode;
import _VisualDVM.Repository.Server.ServerExchangeUnit_2021;
2024-10-14 15:19:13 +03:00
import _VisualDVM.Utils;
2023-09-17 22:13:42 +03:00
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.*;
2024-10-09 23:37:58 +03:00
public abstract class RepositoryPass<S extends RepositoryServer, T> extends Pass<T> {
2023-09-17 22:13:42 +03:00
protected S server;
protected ObjectInputStream in = null; // поток чтения из сокета
protected ObjectOutputStream out = null; // поток записи в сокет
//-
public ServerExchangeUnit_2021 client_request;
public ServerExchangeUnit_2021 server_response;
2023-09-17 22:13:42 +03:00
//-
protected Socket clientSocket = null; //сокет для общения
protected ServerCode ExitCode = ServerCode.Undefined;
2024-10-14 15:19:13 +03:00
public RepositoryPass(S server_in) {
server = server_in;
}
2023-09-17 22:13:42 +03:00
@Override
protected boolean needsAnimation() {
return true;
}
protected int getTimeout() {
return Constants.SocketTimeout;
2023-09-17 22:13:42 +03:00
}
//-
protected void connect() throws Exception {
clientSocket = Utils.createClientSocket(InetAddress.getByName(Constants.ServerAddress),
2023-09-17 22:13:42 +03:00
server.getPort(),
getTimeout()
);
out = new ObjectOutputStream(clientSocket.getOutputStream());
in = new ObjectInputStream(clientSocket.getInputStream());
}
protected void disconnect() throws Exception {
if (clientSocket != null)
clientSocket.close();
if (in != null)
in.close();
if (out != null)
out.close();
//-
clientSocket = null;
in = null;
out = null;
}
protected abstract void ServerAction() throws Exception;
protected void Command(ServerExchangeUnit_2021 request_in) throws Exception {
ExitCode = ServerCode.Undefined;
client_request = request_in;
out.writeObject(client_request);
server_response = (ServerExchangeUnit_2021) in.readObject();
switch (ExitCode = server_response.getCode()) {
2023-09-17 22:13:42 +03:00
case FAIL:
throw (Exception) server_response.object;
2023-09-17 22:13:42 +03:00
default:
break;
}
}
@Override
protected void body() throws Exception {
connect();
ServerAction();
}
@Override
protected void performFinish() throws Exception {
disconnect();
}
@Override
protected void CheckException(Exception ex) {
if (ex instanceof RepositoryRefuseException) {
2023-09-17 22:13:42 +03:00
Log.Writeln_(ex.getMessage());
return;
}
Throwable cause = getCauseRec(ex);
if ((cause instanceof UnknownHostException)) {
Log.Writeln_("Репозиторий не найден.\n" +
"Проверьте наличие подключения к сети.");
} else if ((cause instanceof SocketTimeoutException)) {
Log.Writeln_("Время ожидания подключения к репозиторию истекло.\n" +
"Проверьте наличие подключения к сети.");
} else if ((cause instanceof ConnectException)) {
if (cause.getMessage().contains("Connection refused: connect"))
Log.Writeln_("Серверный компонент не активен. Обратитесь к администрации.");
else Log.Writeln_("Ошибка соединения");
} else
super.CheckException(ex);
}
}