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

This commit is contained in:
2025-02-13 20:27:01 +03:00
parent 91f4ed4a17
commit 54ec1fee99
13 changed files with 319 additions and 490 deletions

View File

@@ -29,9 +29,10 @@ import java.util.LinkedHashMap;
import java.util.Properties;
import java.util.Vector;
public abstract class RepositoryServer<D extends Database> {
public final static String separator = "----------------------------------";
protected static FileWriter Log;
protected static boolean printOn = true;
public abstract String getServerFileName();
public abstract String getServerHomeName();
//-
public D db;
protected Socket clientSocket; //сокет для общения
@@ -159,12 +160,6 @@ public abstract class RepositoryServer<D extends Database> {
public void StartAction() throws Exception {
}
public void Start() throws Exception {
/*
File started = new File(Constants.STARTED);
if (started.exists())
FileUtils.forceDelete(started);
Utils.createEmptyFile(Constants.STARTED);
*/
DiagnosticSignalHandler.install("TERM", signalHandler);
DiagnosticSignalHandler.install("INT", signalHandler);
DiagnosticSignalHandler.install("ABRT", signalHandler);
@@ -192,64 +187,31 @@ public abstract class RepositoryServer<D extends Database> {
Print("клиент_2021: <- " + (request.codeName));
try {
code = request.getCode();
//базовый функционал.
response = new ServerExchangeUnit_2021(ServerCode.OK);
switch (code) {
//<editor-fold desc="файлы и почта">
case Ping:
Ping();
break;
case ReadFile:
Print("Отправить клиенту текст файла по пути " + Utils_.Brackets(request.arg));
response = new ServerExchangeUnit_2021(ServerCode.OK, "", Utils.ReadAllText(new File(request.arg)));
ReadFile();
break;
case SendFile:
//нам пришел файл.
Print("Получить от клиента файл, и распаковать его по пути " + Utils_.Brackets(request.arg));
request.Unpack(); //распаковка идет по его аргу-пути назначения
response = new ServerExchangeUnit_2021(ServerCode.OK);
SendFile();
break;
case ReceiveFile:
Print("Отправить клиенту файл по пути " + Utils_.Brackets(request.arg));
response = new ServerExchangeUnit_2021(ServerCode.OK);
File file = new File(request.arg);
response.object = file.exists() ? Utils_.fileToBytes(file) : null;
ReceiveFile();
break;
case Email:
Print("Отправка сообщения электронной почты");
Email((EmailMessage) request.object, request.arg);
response = new ServerExchangeUnit_2021(ServerCode.OK);
break;
//</editor-fold>
//<editor-fold desc="Главная база данных">
case CheckObjectExistense:
p = (Pair<Class, Object>) request.object;
Print("Проверить существование объекта класса " + p.getKey().toString() + " с ключом " + p.getValue());
response = new ServerExchangeUnit_2021(ServerCode.OK);
response.object = db.checkObjectExistense(p.getKey(), p.getValue());
Email();
break;
case EditObject:
DBObject new_object = (DBObject) request.object;
Print("Редактировать объект " + new_object.getPK());
db.UpdateWithCheck(new_object);
afterEditAction(new_object);
response = new ServerExchangeUnit_2021(ServerCode.OK);
break;
case DeleteObject: //устарело. потом убрать. сейчас на это баг репорты повязаны.
dbObject = (DBObject) request.object;
Print("Удалить объект " + dbObject.getPK());
db.DeleteWithCheck(dbObject);
afterDeleteAction(dbObject);
response = new ServerExchangeUnit_2021(ServerCode.OK);
EditObject();
break;
case GetObjectCopyByPK:
p = (Pair<Class, Object>) request.object;
Print("Получить копию объекта класса " + p.getKey().toString() + " по ключу " + p.getValue());
dbObject = db.getObjectCopyByPK(p.getKey(), p.getValue());
response = new ServerExchangeUnit_2021(ServerCode.OK);
response.object = dbObject;
GetObjectCopyByPK();
break;
case GetObjectsCopiesByPK:
Print("Получить список копий объектов по ключам");
p = (Pair<Class, Object>) request.object;
response = new ServerExchangeUnit_2021(ServerCode.OK);
response.object = db.getObjectsCopies(p.getKey(), (Vector<Object>) p.getValue());
GetObjectsCopiesByPK();
break;
case PublishObject:
PublishObject();
@@ -266,15 +228,6 @@ public abstract class RepositoryServer<D extends Database> {
case CloneObjectByPK:
CloneObject();
break;
//</editor-fold>
case EXIT:
Print("ЗАВЕРШИТЬ РАБОТУ СЕРВЕРА");
System.exit(0);
break;
case Ping:
Print("Проверка активности сервера");
Ping();
break;
default:
Session();
break;
@@ -317,78 +270,7 @@ public abstract class RepositoryServer<D extends Database> {
}
}
//--
protected Database getDefaultDatabase() {
return db;
}
//--
private void PublishObject() throws Exception {
response = new ServerExchangeUnit_2021(ServerCode.OK);
DBObject dbObject = (DBObject) request.object;
beforePublishAction(dbObject);
response.object = (Serializable) getDefaultDatabase().InsertS(dbObject).getPK();
afterPublishAction(dbObject);
}
private void PublishObjects() throws Exception {
response = new ServerExchangeUnit_2021(ServerCode.OK);
Vector<DBObject> objects = (Vector<DBObject>) request.object;
Database database = getDefaultDatabase();
for (DBObject dbObject : objects) {
beforePublishAction(dbObject);
response.object = (Serializable) database.InsertS(dbObject).getPK();
afterPublishAction(dbObject);
}
}
private void CloneObject() throws Exception {
response = new ServerExchangeUnit_2021(ServerCode.OK);
Print("Дублировать объект по ключу");
Pair<Class, Object> to_clone = (Pair<Class, Object>) request.object;
Object pk = to_clone.getValue();
if (db.getTable(to_clone.getKey()).containsKey(to_clone.getValue())) {
riDBObject src = (riDBObject) db.getTable(to_clone.getKey()).get(to_clone.getValue());
riDBObject dst = (riDBObject) to_clone.getKey().newInstance();
dst.SynchronizeFields(src);
//единственное отличие клона - текущий автор
dst.description += " копия";
String[] packed = request.arg.split("\n");
dst.sender_name = packed[0];
dst.sender_address = packed[1];
db.Insert(dst);
afterCloneAction(src, dst);
response.object = (Serializable) dst.getPK();
}
}
protected void afterCloneAction(riDBObject src, riDBObject dst) throws Exception {
}
protected void beforePublishAction(DBObject object) throws Exception {
}
protected void afterPublishAction(DBObject object) throws Exception {
}
protected void afterEditAction(DBObject object) throws Exception {
}
//------------------------------
private void DeleteObjectByPK() throws Exception {
Print("Удалить объект по ключу");
Pair<Class, Object> to_delete = (Pair<Class, Object>) request.object;
afterDeleteAction(getDefaultDatabase().DeleteByPK(to_delete.getKey(), to_delete.getValue()));
response = new ServerExchangeUnit_2021(ServerCode.OK);
}
private void DeleteObjectsByPK() throws Exception {
Print("Удалить объекты по ключам");
Pair<Class, Vector<Object>> to_delete = (Pair<Class, Vector<Object>>) request.object;
Database database = getDefaultDatabase();
for (Object object : to_delete.getValue()) {
afterDeleteAction(database.DeleteByPK(to_delete.getKey(), object));
}
response = new ServerExchangeUnit_2021(ServerCode.OK);
}
public void afterDeleteAction(DBObject object) throws Exception {
}
public void Ping() {
response = new ServerExchangeUnit_2021(ServerCode.OK);
}
//--
public abstract String getServerFileName();
public abstract String getServerHomeName();
void Ping() {}
public boolean PingFromClient() {
RepositoryPass pingPass = new RepositoryPass(this) {
boolean success;
@@ -429,4 +311,83 @@ public abstract class RepositoryServer<D extends Database> {
};
return pingPass.Do();
}
void ReadFile() throws Exception {
response = new ServerExchangeUnit_2021(ServerCode.OK, "", Utils.ReadAllText(new File(request.arg)));
}
void ReceiveFile() throws Exception {
File file = new File(request.arg);
response.object = file.exists() ? Utils_.fileToBytes(file) : null;
}
void SendFile() throws Exception {
request.Unpack(); //распаковка идет по его аргу-пути назначения
}
void Email() throws Exception {
Email((EmailMessage) request.object, request.arg);
}
//----
void PublishObject() throws Exception {
DBObject dbObject = (DBObject) request.object;
beforePublishAction(dbObject);
response.object = (Serializable) db.InsertS(dbObject).getPK();
afterPublishAction(dbObject);
}
void PublishObjects() throws Exception {
Vector<DBObject> objects = (Vector<DBObject>) request.object;
for (DBObject dbObject : objects) {
beforePublishAction(dbObject);
response.object = (Serializable) db.InsertS(dbObject).getPK();
afterPublishAction(dbObject);
}
}
void CloneObject() throws Exception {
Pair<Class, Object> to_clone = (Pair<Class, Object>) request.object;
Object pk = to_clone.getValue();
if (db.getTable(to_clone.getKey()).containsKey(to_clone.getValue())) {
riDBObject src = (riDBObject) db.getTable(to_clone.getKey()).get(to_clone.getValue());
riDBObject dst = (riDBObject) to_clone.getKey().newInstance();
dst.SynchronizeFields(src);
//единственное отличие клона - текущий автор
dst.description += " копия";
String[] packed = request.arg.split("\n");
dst.sender_name = packed[0];
dst.sender_address = packed[1];
db.Insert(dst);
afterCloneAction(src, dst);
response.object = (Serializable) dst.getPK();
}
}
void GetObjectCopyByPK() throws Exception {
Pair<Class, Object> p = (Pair<Class, Object>) request.object;
DBObject dbObject = db.getObjectCopyByPK(p.getKey(), p.getValue());
response.object = dbObject;
}
void GetObjectsCopiesByPK() throws Exception {
Pair<Class, Object> p = (Pair<Class, Object>) request.object;
response.object = db.getObjectsCopies(p.getKey(), (Vector<Object>) p.getValue());
}
void EditObject() throws Exception {
DBObject new_object = (DBObject) request.object;
db.UpdateWithCheck(new_object);
afterEditAction(new_object);
}
void DeleteObjectByPK() throws Exception {
Pair<Class, Object> to_delete = (Pair<Class, Object>) request.object;
afterDeleteAction(db.DeleteByPK(to_delete.getKey(), to_delete.getValue()));
}
void DeleteObjectsByPK() throws Exception {
Pair<Class, Vector<Object>> to_delete = (Pair<Class, Vector<Object>>) request.object;
for (Object object : to_delete.getValue()) {
afterDeleteAction(db.DeleteByPK(to_delete.getKey(), object));
}
}
protected void afterCloneAction(riDBObject src, riDBObject dst) throws Exception {
}
protected void beforePublishAction(DBObject object) throws Exception {
}
protected void afterPublishAction(DBObject object) throws Exception {
}
protected void afterEditAction(DBObject object) throws Exception {
}
protected void afterDeleteAction(DBObject object) throws Exception {
}
}