11package io .nodelink .server ;
22
3- import org .jline .reader .LineReader ;
4- import org .jline .reader .LineReaderBuilder ;
3+ import io .nodelink .server .update .Version ;
4+ import org .jline .reader .EndOfFileException ;
5+ import org .jline .reader .UserInterruptException ;
56import org .jline .terminal .Terminal ;
67import org .jline .terminal .TerminalBuilder ;
7-
8+ import org .jline .reader .LineReader ;
9+ import org .jline .reader .LineReaderBuilder ;
10+ import org .jline .utils .InfoCmp .Capability ;
811import java .nio .file .Paths ;
912
1013public class NodeLinkHelper {
1114
1215 private static final NodeLinkHelper INSTANCE = new NodeLinkHelper ();
1316
14- protected void INITIALIZE () {
15- NodeLink .getInstance ().getUpdater ().checkForUpdates ();
17+ private static final String RESET = "\u001B [0m" ;
18+ private static final String GREEN = "\u001B [32m" ;
19+ private static final String BLUE = "\u001B [34m" ;
20+ private static final String RED = "\u001B [31m" ;
21+ private static final String WHITE = "\u001B [37m" ;
22+ private static final String YELLOW = "\u001B [33m" ;
1623
17- initTerminal ();
24+ private static String STATUS = "Main" ;
25+ private static String PRODUCT = "Post Production" ;
26+
27+ private static final int RESERVED_ROWS = 36 ;
1828
29+ public static NodeLinkHelper getHelper () {
30+ return INSTANCE ;
31+ }
32+
33+ protected void INITIALIZE () {
34+ initTerminal ();
1935 }
2036
2137 private void initTerminal () {
2238 try {
23- Terminal TERMINAL = TerminalBuilder .builder ()
39+ Terminal terminal = TerminalBuilder .builder ()
2440 .name ("NodeLink Server" )
2541 .system (true )
2642 .build ();
2743
28- LineReader READER = LineReaderBuilder .builder ()
29- .terminal (TERMINAL )
44+ LineReader reader = LineReaderBuilder .builder ()
45+ .terminal (terminal )
3046 .variable (LineReader .HISTORY_FILE , Paths .get ("bin/history.txt" ))
3147 .option (LineReader .Option .AUTO_FRESH_LINE , true )
32- .option (LineReader .Option .HISTORY_BEEP , true )
3348 .build ();
3449
35- } catch (Exception e ) {
36- NodeLink .getInstance ().getLogger ().ERROR (e .getMessage ());
50+ fullClearAndRefresh (terminal );
51+
52+ while (true ) {
53+ String prompt = GREEN + "Server" + RESET + "@" + YELLOW + "NodeLink" + RESET + "-(" + RED + STATUS + RESET + ")~" + WHITE + "$ " + RESET ;
54+
55+ try {
56+ String command = reader .readLine (prompt );
57+
58+ if (command == null || command .equalsIgnoreCase ("exit" )) break ;
59+
60+ if (command .equalsIgnoreCase ("clear" )) {
61+ fullClearAndRefresh (terminal );
62+ continue ;
63+ }
64+
65+ if (command .equalsIgnoreCase ("wow" )) {
66+ STATUS = "Wow Mode" ;
67+ fullClearAndRefresh (terminal );
68+ continue ;
69+ }
70+
71+ terminal .writer ().println ("Exécution de : " + command );
72+
73+ } catch (UserInterruptException | EndOfFileException e ) {
74+ break ;
75+ }
76+ }
77+ } catch (Exception _) {}
78+ }
79+
80+ private void fullClearAndRefresh (Terminal terminal ) {
81+ terminal .writer ().print ("\u001B [r" );
82+ terminal .writer ().print ("\u001B [2J\u001B [3J" );
83+ terminal .puts (Capability .cursor_address , 0 , 0 );
84+ terminal .flush ();
85+
86+ drawStaticInterface (terminal );
87+
88+ terminal .writer ().print ("\u001B [" + (RESERVED_ROWS + 1 ) + ";r" );
89+ terminal .puts (Capability .cursor_address , RESERVED_ROWS , 0 );
90+ terminal .flush ();
91+ }
92+
93+ private void drawStaticInterface (Terminal terminal ) {
94+ terminal .puts (Capability .cursor_address , 0 , 0 );
95+
96+ String [] logoLines = LOGO ().split ("\n " );
97+ String [] headerLines = HEADER ().split ("\n " );
98+ int width = terminal .getWidth ();
99+
100+ int logoHeight = logoLines .length ;
101+ for (int i = 0 ; i < logoHeight ; i ++) {
102+ String leftPart = (i >= 12 && (i - 12 ) < headerLines .length ) ? BLUE + headerLines [i - 12 ] + RESET : "" ;
103+ String rightPart = logoLines [i ];
104+
105+ int padding = width - getPlainTextLength (leftPart ) - getPlainTextLength (rightPart );
106+ if (padding < 0 ) padding = 0 ;
107+
108+ terminal .writer ().println (leftPart + " " .repeat (padding ) + rightPart );
37109 }
110+
111+ terminal .writer ().println (GREEN + " ● Status: " + RESET + YELLOW + PRODUCT + RESET );
112+ terminal .writer ().println (GREEN + " ● Version: " + RESET + Version .VERSION );
113+ terminal .writer ().println (GREEN + " ● Memory: " + RESET + getMemoryUsage ());
114+
115+ int currentLine = logoHeight + 4 ;
116+ for (int i = currentLine ; i < RESERVED_ROWS - 1 ; i ++) {
117+ terminal .writer ().println ("" );
118+ }
119+
120+ terminal .writer ().print (BLUE + "─" .repeat (width ) + RESET );
121+ terminal .flush ();
38122 }
39123
40- /// Getters ///
124+ private String getMemoryUsage () {
125+ Runtime runtime = Runtime .getRuntime ();
126+ long used = (runtime .totalMemory () - runtime .freeMemory ()) / 1024 / 1024 ;
127+ return used + " MB / " + (runtime .maxMemory () / 1024 / 1024 ) + " MB" ;
128+ }
41129
42- public static NodeLinkHelper getHelper () {
43- return INSTANCE ;
130+ private int getPlainTextLength (String s ) {
131+ return s .replaceAll ("\u001B \\ [[;\\ d]*m" , "" ).length ();
132+ }
133+
134+ private String LOGO () {
135+ return """
136+ ░ \s
137+ ░░ \s
138+ ░░░ \s
139+ ░░ \s
140+ ░ ░ ░░ ░ \s
141+ ░░░ ░░ ░░ ░ ░░ ░ \s
142+ ░░░ ░░ ░ ░░░ ░░ ░░ \s
143+ ░░░░ ░░░░ ░░░ ░ ░░░ \s
144+ ░░░ ░░░░░░░ ░ ░░░░ \s
145+ ░░░░░░░░░▒▒▒▒░░░░░░░░░ \s
146+ ░░ ░░░░░░▒▒▒▒▒▒▒▒▒▒▒▒░░░░░ ░░ \s
147+ ░░░░ ░░░░▒▒░░░░▒▒▓▓▓▓▒▒▒░░ ░░░░ \s
148+ ░░░░▒░░░░░░▒▓▓▓▓▓▓▒▒▒░░░ \s
149+ ░░░░░▒▒░▒░░░▒▓▓▓▓███▓▒▒▒░░░ \s
150+ ░░░░░░░░░░░░░▒▒▒▒▒▒▒▓▓▓▓▓▓████▓▒▒▒░░░░░░░░░░░░░░░ \s
151+ ░░░ ░░ ░░░░▒▒▒▓▓▓▓▓▓███▓▓▓▓▒▒▒░░░░ \s
152+ ░░░░░▒▒▒▓▓▓▓▓▓▓▓▓▓▓▒▒▒▒░░ \s
153+ ░░░░░▒▒▒▓▓▓▓▓▓▒▒▒░░▒▒░░░░░ \s
154+ ░░░ ░░░░▒▒▒▒▒▒▒░░░░▒▒▒░░░░ ░░░ \s
155+ ░ ░░░░░░░▒▒▒▒▒▒▒▒░░░░░░░ \s
156+ ░░░░ ░░ ░░░░▒░░░░░ ░░░░░░ \s
157+ ░ ░░ ░ ░░░ ░ ░░ ░░░ \s
158+ ░░ ░░ ░░░ ░ ░░ ░░ \s
159+ ░░ ░░ ░░░ ░░ ░░ \s
160+ ░ ░ ░░ ░ ░ \s
161+ ░░ \s
162+ ░░ \s
163+ ░░ \s
164+ ░ \s
165+ ░ \s """ ;
166+ }
167+
168+ private String HEADER () {
169+ return """
170+ __ __ __ ____ __ ______ ____ __ __ ______ \s
171+ /\\ \\ /\\ \\ /\\ \\ /\\ _`\\ /\\ \\ /\\ __ _\\ /\\ _`\\ /\\ \\ /\\ \\ /\\ __ _\\ \s
172+ \\ \\ `\\ \\ \\ \\ \\ \\ \\ \\ \\ /\\ _\\ \\ \\ \\ \\ /_/\\ \\ / \\ \\ \\ L\\ _\\ \\ \\ `\\ \\ \\ \\ /_/\\ \\ / \s
173+ \\ \\ , ` \\ \\ \\ \\ __ _______ \\ \\ \\ /_/_ \\ \\ \\ __ \\ \\ \\ \\ \\ _\\ L \\ \\ , ` \\ \\ \\ \\ \s
174+ \\ \\ \\ `\\ \\ \\ \\ \\ L\\ \\ /\\ ______\\ \\ \\ \\ L\\ \\ \\ \\ \\ L\\ \\ \\ _\\ \\ __ \\ \\ \\ L\\ \\ \\ \\ \\ `\\ \\ \\ \\ \\ \s
175+ \\ \\ _\\ \\ _\\ \\ \\ ____/ \\ /______/ \\ \\ ____/ \\ \\ ____/ /\\ _____\\ \\ \\ ____/ \\ \\ _\\ \\ _\\ \\ \\ _\\
176+ \\ /_/\\ /_/ \\ /___/ \\ /___/ \\ /___/ \\ /_____/ \\ /___/ \\ /_/\\ /_/ \\ /_/""" ;
44177 }
45- }
178+ }
0 commit comments