1
1
package vip .floatationdevice .mcumbrella .cslbungee .server ;
2
2
3
3
import net .md_5 .bungee .api .plugin .*;
4
+ import net .md_5 .bungee .BungeeCord ;
4
5
5
6
import java .net .*;
7
+ import java .text .SimpleDateFormat ;
6
8
import java .io .*;
7
9
import java .util .*;
10
+
8
11
public class CSLBS extends Plugin
9
12
{
10
13
int port =14514 ;
11
14
public static CSLBS main ;
12
- long round ;
13
- boolean valid =false ;
15
+ long round =0 ;
14
16
static HashMap <String , Boolean > P = new HashMap <String , Boolean >();
15
17
static HashSet <String > cmdWhitelist = new HashSet <String >();
16
18
public void onEnable ()
@@ -40,7 +42,7 @@ public void onEnable()
40
42
bw .flush ();
41
43
bw .close ();
42
44
}
43
- BufferedReader br = new BufferedReader (new FileReader ("cmdWhitelist.txt" ));
45
+ BufferedReader br = new BufferedReader (new FileReader (file ));
44
46
String str ;
45
47
while ((str = br .readLine ()) != null )
46
48
{
@@ -49,7 +51,7 @@ public void onEnable()
49
51
br .close ();
50
52
}catch (Throwable e )
51
53
{
52
- getLogger ().warning ("Error reading/creating command whitelist(" +this .getDataFolder ().toPath ()+File .separator +"cmdWhitelist.txt" +"). Using default values. (" +e .toString ()+")" );
54
+ getLogger ().severe ("Error reading/creating command whitelist(" +this .getDataFolder ().toPath ()+File .separator +"cmdWhitelist.txt" +"). Using default values. (" +e .toString ()+")" );
53
55
cmdWhitelist .add ("/login" );
54
56
cmdWhitelist .add ("/register" );
55
57
cmdWhitelist .add ("/l" );
@@ -72,93 +74,116 @@ public void run()
72
74
System .out .println ("CSLBungee server listening on port:" +port );
73
75
for (;;)
74
76
{
75
- round ++;
76
- //getLogger().info("Round "+round); DEBUG
77
+ //getLogger().info("Round^ "+round); DEBUG
77
78
Socket socket = server .accept ();
78
- //getLogger().info("Incoming connection"); DEBUG
79
- valid = true ;
80
- Thread t = new Thread ("CSLBungee-Server Connection Timer " )
79
+
80
+
81
+ new Thread ("CSLBungee-Server Connection Processor " )
81
82
{
83
+ boolean dataValid =true ;
82
84
public void run ()
83
85
{
84
- //getLogger().info("Timer started"); DEBUG
85
- try {
86
- Thread .sleep (1000 );
87
- socket .close ();
88
- valid =false ;
86
+ long thisRound =++round ; //used for debug and counting rounds
87
+ //getLogger().info("Round "+thisRound); DEBUG
88
+
89
+ /* Timer: used to detect if a round took too many time to process.
90
+ * Doesn't work as expected.
91
+ * Fortunately it doesn't seem to have much impact on this version of CSLBungee Server.
92
+ * Expected: Skip a round which took more than 1s to process.
93
+ new Thread("CSLBungee-Server Connection Timer")
94
+ {
95
+ public void run()
96
+ {
97
+ //getLogger().info("Timer started"); DEBUG
98
+ try {
99
+ Thread.sleep(1000);
100
+ if(!dataValid) {socket.close();getLogger().warning("Round "+thisRound+" took more 1s to process. Skipping");}
101
+ } catch (Throwable e) {
102
+ e.printStackTrace();
103
+ }
104
+ }
105
+ }.start();
106
+ */
107
+
108
+ InputStream inputStream = null ;
109
+ try {
110
+ inputStream = socket .getInputStream ();
89
111
} catch (Throwable e ) {
112
+ dataValid =false ;
113
+ getLogger ().severe ("Error initializing round " +thisRound +":" );
90
114
e .printStackTrace ();
91
115
}
92
- }
93
- };
94
- t .start ();
95
-
96
- InputStream inputStream = socket .getInputStream ();
97
- byte [] bytes = new byte [64 ];
98
- int len ;
99
- StringBuilder sb = new StringBuilder ();
100
- try
101
- {
102
- while ((len = inputStream .read (bytes )) != -1 ) {
103
- sb .append (new String (bytes , 0 , len ,"UTF-8" ));
104
- if (sb .toString ().startsWith ("GET " ))
105
- {
106
- valid =false ;
107
- try
108
- {
109
- OutputStreamWriter osw = new OutputStreamWriter (socket .getOutputStream (),"utf-8" );
110
- osw .write ("HTTP/1.1 400 Bad Request\r \n " );
111
- osw .write ("Server: CSLBungee-Server/1.0\r \n " );
112
- osw .write ("Content-Type: text/html;charset=UTF-8\r \n " );
113
- osw .write ("Transfer-Encoding: chunked\r \n " );
114
- osw .write ("Date: Sat, 1 Jan 1921 00:00:01 GMT\r \n " );
115
- osw .write ("\r \n " );
116
- osw .write ("c9\r \n " );
117
- osw .write ("<!DOCTYPE HTML>\r \n " );
118
- osw .write ("<html><body><center><h1>HTTP REQUEST NOT ALLOWED</h1><hr>CSLBungee-Server Version 1.0</center></body></html>\r \n " );
119
- osw .flush ();
120
- osw .close ();
121
- socket .close ();
122
- }catch (Throwable e ) {socket .close ();}
123
- break ;
124
- }
125
- else if (!sb .toString ().startsWith ("CSLBungee-Client-1.0" ))
126
- {
127
- valid =false ;
128
- //getLogger().warning("Bad data received: \n"+sb+"\n================================"); DEBUG
129
- socket .close ();
130
- break ;
131
- }
132
- else
133
- {
134
- if (valid ){
135
- socket .close ();
136
- String [] data =sb .toString ().split ("\r \n " );
137
- if (data .length !=3 ) {getLogger ().warning ("Bad data received(Round=" +round +"):\n " +sb +"\n ================================" );break ;}
138
- getLogger ().info ("CSLBungee Client connected" );
139
- if (data [1 ].equals ("S" ))
116
+ byte [] bytes = new byte [64 ];
117
+ int len ;
118
+ StringBuilder sb = new StringBuilder ();
119
+ try
120
+ {
121
+ while ((len = inputStream .read (bytes )) != -1 ) {
122
+ sb .append (new String (bytes , 0 , len ,"UTF-8" ));
123
+ if (sb .toString ().startsWith ("GET " ))
140
124
{
141
- P .replace (data [2 ],true );
142
- getLogger ().info ("Set player '" +data [2 ]+"' status to 'logged in'" );
125
+ dataValid =false ;
126
+ try
127
+ {
128
+ SimpleDateFormat sdf =new SimpleDateFormat ("EEE, dd MMM yyyy HH:mm:ss z" , Locale .US );
129
+ sdf .setTimeZone (TimeZone .getTimeZone ("GMT" ));
130
+ String httpdate =sdf .format (new Date ());
131
+ OutputStreamWriter osw = new OutputStreamWriter (socket .getOutputStream (),"utf-8" );
132
+ osw .write ("HTTP/1.1 400 Bad Request\r \n " );
133
+ osw .write ("Server: CSLBungee-Server/1.2\r \n " );
134
+ osw .write ("Content-Type: text/html;charset=UTF-8\r \n " );
135
+ osw .write ("Transfer-Encoding: chunked\r \n " );
136
+ osw .write ("Date: " +httpdate +"\r \n " );
137
+ osw .write ("\r \n " );
138
+ osw .write ("c9\r \n " );
139
+ osw .write ("<!DOCTYPE HTML>\r \n " );
140
+ osw .write ("<html><head><title>" +thisRound +"</title></head><body><center><h1>CSLBungee Server V1.2 Running</h1><hr>" +httpdate +"</center></body></html>\r \n " );
141
+ osw .flush ();
142
+ osw .close ();
143
+ socket .close ();
144
+ }catch (Throwable e ) {socket .close ();}
145
+ break ;
143
146
}
144
- else if (data [ 1 ]. equals ( "U " ))
147
+ else if (! sb . toString (). startsWith ( "CSLBungee-Client-1.0 " ))
145
148
{
146
- P .replace (data [2 ],false );
147
- getLogger ().info ("Set player '" +data [2 ]+"' status to 'not logged in'" );
149
+ dataValid =false ;
150
+ //getLogger().warning("Round "+thisRound+" bad data received:\n"+sb+"\n================================"); DEBUG
151
+ socket .close ();
152
+ break ;
148
153
}
149
154
else
150
155
{
151
- getLogger ().warning ("Bad data received(Round=" +round +"):\n " +sb +"\n ================================" );
156
+ if (dataValid ){
157
+ socket .close ();
158
+ String [] data =sb .toString ().split ("\r \n " );
159
+ if (data .length !=3 ) {getLogger ().warning ("Round " +thisRound +" bad data received:\n " +sb +"\n ================================" );break ;}
160
+ //getLogger().info("CSLBungee Client connected"); DEBUG
161
+ if (data [1 ].equals ("S" ))
162
+ {
163
+ P .replace (data [2 ],true );
164
+ getLogger ().info ("Set player '" +data [2 ]+"' status to 'logged in'" );
165
+ }
166
+ else if (data [1 ].equals ("U" ))
167
+ {
168
+ P .replace (data [2 ],false );
169
+ getLogger ().info ("Set player '" +data [2 ]+"' status to 'not logged in'" );
170
+ }
171
+ else
172
+ {
173
+ getLogger ().warning ("Round " +thisRound +" bad data received:\n " +sb +"\n ================================" );
174
+ }
175
+ break ;
176
+ };break ;
152
177
}
153
- break ;
154
- };break ;
155
- }
156
- }
178
+ }
157
179
158
- }catch (Throwable e ){valid =false ; /*getLogger().warning("ERROR PROCESSING DATA: "+e.toString());*/ socket .close ();continue ;}
159
-
180
+ }catch (Throwable e ) {}
181
+ //getLogger().info("Round "+thisRound+" end"); DEBUG
182
+ }
183
+ }.start ();
184
+
160
185
}
161
- }catch (Throwable e ) {getLogger ().warning ("CSLBungee SERVER ERROR(Round =" +round +"):" );e .printStackTrace ();System .exit (-1 );}
186
+ }catch (Throwable e ) {getLogger ().severe ("CSLBungee SERVER ERROR (round =" +round +"):" );e .printStackTrace (); BungeeCord . getInstance (). stop ( "CSLBungee Server thread error" );System .exit (-1 );}
162
187
}
163
188
}.start ();
164
189
getLogger ().info ("Enabled." );
0 commit comments