From d19dd08ec9e74cfca9d386c7a25748048f9bf801 Mon Sep 17 00:00:00 2001 From: erius Date: Mon, 16 May 2022 15:55:16 +0300 Subject: [PATCH] added shutdown hook which saves data on the server --- .../compileJava/previous-compilation-data.bin | Bin 7431 -> 7433 bytes .../build/docs/javadoc/allclasses-frame.html | 1 - .../docs/javadoc/allclasses-noframe.html | 1 - .../common/commandline/package-frame.html | 1 - .../common/commandline/package-summary.html | 4 - Lab5Core/build/docs/javadoc/index-all.html | 10 ++ .../compileJava/previous-compilation-data.bin | Bin 8073 -> 8069 bytes .../commandline/CommandLineHandler.java | 112 +++++++++++------- .../classes/java/main/server/Lab5Server.class | Bin 2838 -> 3383 bytes Lab5Server/build/libs/lab5.xml | 18 --- .../compileJava/previous-compilation-data.bin | Bin 1136 -> 1138 bytes .../src/main/java/server/Lab5Server.java | 2 + 12 files changed, 82 insertions(+), 67 deletions(-) diff --git a/Lab5Client/build/tmp/compileJava/previous-compilation-data.bin b/Lab5Client/build/tmp/compileJava/previous-compilation-data.bin index 98c75423f25832e3d61cca0879bc04febb6d7c76..a95fe0f4f18398ec67fedd7217bc95524617f8eb 100644 GIT binary patch delta 53 zcmZp->a^M*#v{=3*|^(oTN1a3eVTr10_&p9YCP}QnOVZ(H;akfXJuuIuV%PD`Jt%M JW^JiEOaSL%5%B;3 delta 51 zcmV-30L=f1I)^&277P&EOc<+B{Zt1i*wWHXzAT}$CJgQe0s~gF7Zl$G1Oa;h*OT!U JGP5lj+yV%-6K4Pb diff --git a/Lab5Core/build/docs/javadoc/allclasses-frame.html b/Lab5Core/build/docs/javadoc/allclasses-frame.html index 7172ad1..ab95041 100644 --- a/Lab5Core/build/docs/javadoc/allclasses-frame.html +++ b/Lab5Core/build/docs/javadoc/allclasses-frame.html @@ -23,7 +23,6 @@
  • Command
  • CommandLineHandler
  • CommandLineHandler.CommandLineNotInitialized
  • -
  • CommandLineHandler.SaveCommand
  • CommandRegistry
  • CommandRegistry.CommandAlreadyExistsException
  • CommandRegistry.CommandNotFoundException
  • diff --git a/Lab5Core/build/docs/javadoc/allclasses-noframe.html b/Lab5Core/build/docs/javadoc/allclasses-noframe.html index 974aea6..a526f3d 100644 --- a/Lab5Core/build/docs/javadoc/allclasses-noframe.html +++ b/Lab5Core/build/docs/javadoc/allclasses-noframe.html @@ -23,7 +23,6 @@
  • Command
  • CommandLineHandler
  • CommandLineHandler.CommandLineNotInitialized
  • -
  • CommandLineHandler.SaveCommand
  • CommandRegistry
  • CommandRegistry.CommandAlreadyExistsException
  • CommandRegistry.CommandNotFoundException
  • diff --git a/Lab5Core/build/docs/javadoc/common/commandline/package-frame.html b/Lab5Core/build/docs/javadoc/common/commandline/package-frame.html index b6b9ff4..3fa7660 100644 --- a/Lab5Core/build/docs/javadoc/common/commandline/package-frame.html +++ b/Lab5Core/build/docs/javadoc/common/commandline/package-frame.html @@ -18,7 +18,6 @@ diff --git a/Lab5Core/build/docs/javadoc/common/commandline/package-summary.html b/Lab5Core/build/docs/javadoc/common/commandline/package-summary.html index 128ca54..87ae181 100644 --- a/Lab5Core/build/docs/javadoc/common/commandline/package-summary.html +++ b/Lab5Core/build/docs/javadoc/common/commandline/package-summary.html @@ -107,10 +107,6 @@ на выполнение из регистра команд, используйте метод CommandLineHandler.start() для его запуска - -CommandLineHandler.SaveCommand -  - CommandRegistry diff --git a/Lab5Core/build/docs/javadoc/index-all.html b/Lab5Core/build/docs/javadoc/index-all.html index cdebda9..999b67a 100644 --- a/Lab5Core/build/docs/javadoc/index-all.html +++ b/Lab5Core/build/docs/javadoc/index-all.html @@ -306,8 +306,12 @@
     
    executeOnClient() - Method in class common.commandline.pdcommands.PeopleDatabaseCommand
     
    +
    executeScript(String) - Method in class common.commandline.CommandLineHandler
    +
     
    ExecuteScriptCommand() - Constructor for class common.commandline.CommandLineHandler.ExecuteScriptCommand
     
    +
    exit() - Method in class common.commandline.CommandLineHandler
    +
     
    ExitCommand() - Constructor for class common.commandline.CommandLineHandler.ExitCommand
     
    @@ -364,6 +368,10 @@
     
    history - Variable in class common.commandline.CommandLineHandler
     
    +
    history() - Method in class common.commandline.CommandLineHandler
    +
     
    +
    history(int) - Method in class common.commandline.CommandLineHandler
    +
     
    HistoryCommand() - Constructor for class common.commandline.CommandLineHandler.HistoryCommand
     
    @@ -510,6 +518,8 @@
    Метод, сохраняющий базу данных в файл, находящемся по пути, указанном в переменной окружения PeopleDatabase.ENV_VAR
    +
    save(PeopleDatabase) - Method in class common.commandline.CommandLineHandler
    +
     
    SaveCommand() - Constructor for class common.commandline.CommandLineHandler.SaveCommand
     
    setHeight(Integer) - Method in class common.data.Person
    diff --git a/Lab5Core/build/tmp/compileJava/previous-compilation-data.bin b/Lab5Core/build/tmp/compileJava/previous-compilation-data.bin index 6d136d868a2531e10634c6e35523b1f197698624..5c50243f7bcdd8bc2e208831f9f86a4b801d1d34 100644 GIT binary patch delta 237 zcmVMW-n!61){NcrvVTv_-tc80<&cgbPg?8kJoyW zE&`k|_%I3URImQD9x=qQ-Gy7ySwmV#L|XudX>)XMa(N99eT^(un&*!_mn#gO(_FZ3 zv-$##0TAA)h5dzG3tjtIK~dkj97MC21S$a#DBGYMYL*yW)&=1_D?#)hlhOsk83I6r z0R&W8e3k(K5CH%KTor@?0CoWaO$U>%200=GkpTw@B>;K>0fYeqTor-=0E+gk2sP4rSSBV zE&`k|5ZnVwCN8HlbcR+_=pT)aSwmV#L|XudX>)XMa(N99g)vRaoZ8Z)Wj-x5EkH|6 zv-$##0T2XqfuAyJ1sexcl;K>0fYeqTor-=0E+{&e3k*TkO=h_Y5h|| diff --git a/Lab5Core/src/main/java/common/commandline/CommandLineHandler.java b/Lab5Core/src/main/java/common/commandline/CommandLineHandler.java index 71b236d..489a25e 100644 --- a/Lab5Core/src/main/java/common/commandline/CommandLineHandler.java +++ b/Lab5Core/src/main/java/common/commandline/CommandLineHandler.java @@ -176,13 +176,75 @@ public abstract class CommandLineHandler { this.reader = new BufferedReader(reader); } + public CommandResult executeScript(String fileName) { + return executeScript(new Object[]{ fileName }); + } + + private CommandResult executeScript(Object[] args) { + String fileName = (String) args[0]; + File file = new File(fileName); + if (!file.exists() || file.isDirectory()) { + Response response = DefaultResponse.FILE_NOT_FOUND; + return new CommandResult(response.getMsg(), response); + } + + Reader streamReader; + try { + streamReader = new InputStreamReader(new FileInputStream(file)); + } catch (FileNotFoundException e) { + Response response = DefaultResponse.UNKNOWN; + return new CommandResult(response.getMsg(), response); + } + addNewInput(streamReader, fileName); + Response response = DefaultResponse.OK; + return new CommandResult(response.getMsg(), response); + } + + public CommandResult history() { + return history(new Object[]{}); + } + + public CommandResult history(int amount) { + return history(new Object[]{ amount }); + } + + private CommandResult history (Object[] args) { + int lines = args.length > 0 ? (int) args[0] : 6; + int start = lines < history.size() ? history.size() - lines : 0; + StringBuilder result = new StringBuilder("История последних команд:\n"); + for (int i = start; i < history.size(); i++) + result.append(history.get(i)).append("\n"); + return new CommandResult(result.toString(), DefaultResponse.OK); + } + + public CommandResult exit() { + return exit(new Object[]{}); + } + + private CommandResult exit(Object[] args) { + isActive = false; + return new CommandResult("Выход из программы...", DefaultResponse.OK); + } + + public CommandResult save(PeopleDatabase peopleDatabase) { + return save(new Object[]{ peopleDatabase }); + } + + private CommandResult save(Object[] args) { + PeopleDatabase peopleDatabase = (PeopleDatabase) args[0]; + try { + peopleDatabase.save(); + Response response = DefaultResponse.OK; + return new CommandResult(response.getMsg(), response); + } catch (Database.DatabaseSaveFailedException e) { + return new CommandResult(e.getMessage(), PeopleDatabaseResponse.SAVE_FAILED); + } + } + public class ExitCommand extends Command { public ExitCommand() { super("exit", true, "exit : завершить программу (без сохранения в файл)"); - this.executable = args -> { - isActive = false; - return new CommandResult("Выход из программы...", DefaultResponse.OK); - }; + this.executable = CommandLineHandler.this::exit; } @Override @@ -194,14 +256,7 @@ public abstract class CommandLineHandler { public class HistoryCommand extends Command { public HistoryCommand() { super("history", true, "history [count] : вывести последние count введенных команд, по умолчанию count равен 6"); - this.executable = args -> { - int lines = args.length > 0 ? (int) args[0] : 6; - int start = lines < history.size() ? history.size() - lines : 0; - StringBuilder result = new StringBuilder("История последних команд:\n"); - for (int i = start; i < history.size(); i++) - result.append(history.get(i)).append("\n"); - return new CommandResult(result.toString(), DefaultResponse.OK); - }; + this.executable = CommandLineHandler.this::history; } @Override @@ -222,25 +277,7 @@ public abstract class CommandLineHandler { public class ExecuteScriptCommand extends Command { public ExecuteScriptCommand() { super("execute_script", true, "execute_script {file_name} : считать и исполнить скрипт из указанного файла. В скрипте содержатся команды в таком же виде, в котором их вводит пользователь в интерактивном режиме."); - this.executable = args -> { - String fileName = (String) args[0]; - File file = new File(fileName); - if (!file.exists() || file.isDirectory()) { - Response response = DefaultResponse.FILE_NOT_FOUND; - return new CommandResult(response.getMsg(), response); - } - - Reader streamReader; - try { - streamReader = new InputStreamReader(new FileInputStream(file)); - } catch (FileNotFoundException e) { - Response response = DefaultResponse.UNKNOWN; - return new CommandResult(response.getMsg(), response); - } - addNewInput(streamReader, fileName); - Response response = DefaultResponse.OK; - return new CommandResult(response.getMsg(), response); - }; + this.executable = CommandLineHandler.this::executeScript; } @Override @@ -254,19 +291,10 @@ public abstract class CommandLineHandler { } } - public static class SaveCommand extends PeopleDatabaseCommand { + public class SaveCommand extends PeopleDatabaseCommand { public SaveCommand() { super("save", true, "save : сохранить коллекцию в файл"); - this.executable = args -> { - PeopleDatabase peopleDatabase = (PeopleDatabase) args[0]; - try { - peopleDatabase.save(); - Response response = DefaultResponse.OK; - return new CommandResult(response.getMsg(), response); - } catch (Database.DatabaseSaveFailedException e) { - return new CommandResult(e.getMessage(), PeopleDatabaseResponse.SAVE_FAILED); - } - }; + this.executable = CommandLineHandler.this::save; } @Override diff --git a/Lab5Server/build/classes/java/main/server/Lab5Server.class b/Lab5Server/build/classes/java/main/server/Lab5Server.class index b68bc393183047a45d144eeaa2bf49d0a4f06b06..88022c7a9deb105e55d9dfaffe039ce20f5c26bb 100644 GIT binary patch delta 1233 zcmZXTX>*fR6vuy0lIA84mo}udP%LdEt)!bNDuRt77R0J8OAE!i!GlQ`nx$kZt^};O z?~mfXFSzig!%WLi#~H?Vegt3m1^fh#qj+vo7?&5%x##@n-2eY9_c_zJxUT&3Ul)G_ zZsMFxE4vhT1!-o$#>3sl+@lx_GQ@5hKYMKUvd@-q*k*+NK@KpgIB0VpV>TwBdf(O2X} z#A0RI$s9>KZ5d}O+qTI);n^Pk7u0Jp7;}HKHo7zZsJrCp@oyk%5pgeBk+3GhwVDkS zG)1C{k{j_R#%49gc~tWlk1L+gJjqj<6Oe zj#MJWGn&&pYlxrIJkJY?7d0>OvU|?kvE`Kz(Kdwi$*|kpxtjVl`BY&hmo22?J93$flT8k%3Z-;0 z;nu2j=u6F4e51L8e$DM{cTcO$)_3lb`o;IXMZ0?`(Bduzx{}TE2$6TvWVR(i!40vm}*6r_VrLFBTvRmf@tn{{^u`v)$tYKibz zch^PgVUg7fG#H>qfW`{Y=WFu$7Fg3HW^MNZP4hyuf;xG-e!LaoenRdK!JhJ{)H*Im zT1q%3!X=S4#cY$zdTQz7dMQ<;rGs8MS1@hfl<>8)j~nIh^RPw6vYDHOd7O|$Tk&y= z33PTXuTKg6#VTAfg|QdDC# zry?c^1eQxNVqReqPTA5jWn!698Om!8{&(iB6~=OvQdK%JlxmqWz>cfCi&kW%_i%G~ z{RLXi<27t%1Xnf~68)VLd8CsbIi+hE;JtLq9>3;W&dRemB)E|~EV&LxnE11SBj7sGx$NV$O;IP(c?FMS>BtVgz#vL$OoS#x6|)yZx|7u{TvX_iIu(;D;_hbZZX!A%R1R zXow!oVZ2_&k%`yeoT4g`7A-}e5IQ6bMu&QOqa{Pp{^62Zho*8{6UeY{1M_X2Tj}Og zV7uMYv^?e-@;PcaMuDQ=p~0ra<=A&_e&o1efI-6$!-^AzlbkY~=8WR3VT5yv^M+~` zIHcR!Kzgd;g5e^Ue8S6yD_pf@UPZ~ZWD1gkj2fYj~9Ng0*!w%d2E>LU-RISYoZMC06$KxLxp77kz#B$pdu6JJ8 zQ{k`PONUaMqBHGdt?ZDF^k&K9fI~L2v1Fd);(^3Mxz)(&$Qf5Tg)<>ZfFg;(STT`# zlABoo#gxb`OeyoFQYf5-LKY{r9{WSLF8)YLXLV#6dB7>s8og}Knv4PrGltaFx<5)7MIO ziS+7ND6DNHvq=6(k9xu8;m(L$K+&KCtXm diff --git a/Lab5Server/build/libs/lab5.xml b/Lab5Server/build/libs/lab5.xml index f88d11c..48bc1c5 100644 --- a/Lab5Server/build/libs/lab5.xml +++ b/Lab5Server/build/libs/lab5.xml @@ -1,22 +1,4 @@ - - wasd - - 2.0 - 2.0 - - 2022-05-16 - 321 - 3213123123 - BLACK - CHINA - - 2.0 - 2.0 - 2 - 2 - - 2022-05-10 diff --git a/Lab5Server/build/tmp/compileJava/previous-compilation-data.bin b/Lab5Server/build/tmp/compileJava/previous-compilation-data.bin index e727e9750b1ba1a224ec3e426bf2e1038eb1b4a5..0d942fb8947b82c0df54446b4c767788889140f9 100644 GIT binary patch delta 70 zcmV-M0J;D02=WM!A`rCA??SKZ)aWa&XbqXFCX2B$Rss-&^D~P+wqgquKV~mwUlTL1t6 delta 68 zcmeyw@quH4lE4&=?2p|JvZoA`{(bpZw^wbWQ5ciJZ6Ar%0e?f-HEvwG cmd.save(peopleDatabase))); + Thread thread = new Thread(() -> { while (true) udp.receive(peopleDatabase);