промежуточный. кусок рефакторинга на тему борьбы с зависаниями. пока не внедрен

This commit is contained in:
2025-02-03 15:19:53 +03:00
parent 6911bc6cdb
commit e0f441d82a
26 changed files with 128 additions and 200 deletions

View File

@@ -39,7 +39,7 @@ public abstract class RepositoryClient {
@Override
protected void ServerAction() throws Exception {
Command(new ServerExchangeUnit_2021(code_in, arg, object_in));
target = response.object;
target = server_response.object;
}
@Override
protected boolean validate() {

View File

@@ -1,10 +1,13 @@
package _VisualDVM.Repository;
import Common.Database.Database;
import Common.Database.Objects.DBObject;
import Common.Passes.PassException;
import Common.Utils.InterruptThread;
import Common.Utils.Utils_;
import _VisualDVM.Constants;
import _VisualDVM.Global;
import _VisualDVM.Passes.Server.RepositoryPass;
import _VisualDVM.Repository.BugReport.BugReport;
import _VisualDVM.Repository.Server.DiagnosticSignalHandler;
import _VisualDVM.Repository.Server.ServerCode;
import _VisualDVM.Repository.Server.ServerExchangeUnit_2021;
@@ -23,10 +26,7 @@ import javax.mail.internet.MimeMultipart;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.Properties;
import java.util.Vector;
import java.util.*;
public abstract class RepositoryServer<D extends Database> {
public final static String separator = "----------------------------------";
protected static FileWriter Log;
@@ -187,6 +187,7 @@ public abstract class RepositoryServer<D extends Database> {
out = new ObjectOutputStream(clientSocket.getOutputStream());
in = new ObjectInputStream(clientSocket.getInputStream());
//->
//todo убрать цикл. пусть читает лишь одну команду.было зависание как раз на чтении второй
while (true) {
DBObject dbObject = null;
Pair<Class, Object> p = null;
@@ -369,4 +370,37 @@ public abstract class RepositoryServer<D extends Database> {
public void Ping() {
response = new ServerExchangeUnit_2021(ServerCode.OK);
}
//---команды со стороны клиента.
public Object ClientRequest(ServerCode code_in, String arg_in, Serializable object_in, int delay) throws Exception {
RepositoryPass pass = new RepositoryPass(this) {
@Override
public String getDescription() {
return code_in.toString();
}
@Override
protected int getTimeout() {
return delay;
}
@Override
protected void ServerAction() throws Exception {
Command(new ServerExchangeUnit_2021(code_in, arg_in,object_in));
target = server_response.object;
}
@Override
protected boolean validate() {
return Log.isEmpty();
}
};
if (pass.Do())
return pass.target;
throw new PassException(Utils_.Brackets(new Date().toString()) + " Ошибка взаимодействия с сервером " + code_in);
}
public Object ClientRequest(ServerCode code_in,String arg_in, Serializable object_in)throws Exception {
return ClientRequest(code_in,arg_in,object_in, 120000);
}
//---
public <T extends DBObject> T getActual(T object_in, Class<T> object_class)throws Exception{
return (T) ClientRequest(ServerCode.GetObjectCopyByPK, "",
new Pair<>(object_class, object_in.getPK()));
}
}