001 package net.minecraft.network.rcon;
002
003 import java.io.IOException;
004 import java.net.DatagramSocket;
005 import java.net.ServerSocket;
006 import java.util.ArrayList;
007 import java.util.Iterator;
008 import java.util.List;
009
010 public abstract class RConThreadBase implements Runnable
011 {
012 /** True if the Thread is running, false otherwise */
013 protected boolean running = false;
014
015 /** Reference to the IServer object. */
016 protected IServer server;
017
018 /** Thread for this runnable class */
019 protected Thread rconThread;
020 protected int field_72615_d = 5;
021
022 /** A list of registered DatagramSockets */
023 protected List socketList = new ArrayList();
024
025 /** A list of registered ServerSockets */
026 protected List serverSocketList = new ArrayList();
027
028 RConThreadBase(IServer par1IServer)
029 {
030 this.server = par1IServer;
031
032 if (this.server.isDebuggingEnabled())
033 {
034 this.logWarning("Debugging is enabled, performance maybe reduced!");
035 }
036 }
037
038 /**
039 * Creates a new Thread object from this class and starts running
040 */
041 public synchronized void startThread()
042 {
043 this.rconThread = new Thread(this);
044 this.rconThread.start();
045 this.running = true;
046 }
047
048 /**
049 * Returns true if the Thread is running, false otherwise
050 */
051 public boolean isRunning()
052 {
053 return this.running;
054 }
055
056 /**
057 * Log debug message
058 */
059 protected void logDebug(String par1Str)
060 {
061 this.server.logDebug(par1Str);
062 }
063
064 /**
065 * Log information message
066 */
067 protected void logInfo(String par1Str)
068 {
069 this.server.logInfo(par1Str);
070 }
071
072 /**
073 * Log warning message
074 */
075 protected void logWarning(String par1Str)
076 {
077 this.server.logWarning(par1Str);
078 }
079
080 /**
081 * Log severe error message
082 */
083 protected void logSevere(String par1Str)
084 {
085 this.server.logSevere(par1Str);
086 }
087
088 /**
089 * Returns the number of players on the server
090 */
091 protected int getNumberOfPlayers()
092 {
093 return this.server.getCurrentPlayerCount();
094 }
095
096 /**
097 * Registers a DatagramSocket with this thread
098 */
099 protected void registerSocket(DatagramSocket par1DatagramSocket)
100 {
101 this.logDebug("registerSocket: " + par1DatagramSocket);
102 this.socketList.add(par1DatagramSocket);
103 }
104
105 /**
106 * Closes the specified DatagramSocket
107 */
108 protected boolean closeSocket(DatagramSocket par1DatagramSocket, boolean par2)
109 {
110 this.logDebug("closeSocket: " + par1DatagramSocket);
111
112 if (null == par1DatagramSocket)
113 {
114 return false;
115 }
116 else
117 {
118 boolean var3 = false;
119
120 if (!par1DatagramSocket.isClosed())
121 {
122 par1DatagramSocket.close();
123 var3 = true;
124 }
125
126 if (par2)
127 {
128 this.socketList.remove(par1DatagramSocket);
129 }
130
131 return var3;
132 }
133 }
134
135 /**
136 * Closes the specified ServerSocket
137 */
138 protected boolean closeServerSocket(ServerSocket par1ServerSocket)
139 {
140 return this.closeServerSocket_do(par1ServerSocket, true);
141 }
142
143 /**
144 * Closes the specified ServerSocket
145 */
146 protected boolean closeServerSocket_do(ServerSocket par1ServerSocket, boolean par2)
147 {
148 this.logDebug("closeSocket: " + par1ServerSocket);
149
150 if (null == par1ServerSocket)
151 {
152 return false;
153 }
154 else
155 {
156 boolean var3 = false;
157
158 try
159 {
160 if (!par1ServerSocket.isClosed())
161 {
162 par1ServerSocket.close();
163 var3 = true;
164 }
165 }
166 catch (IOException var5)
167 {
168 this.logWarning("IO: " + var5.getMessage());
169 }
170
171 if (par2)
172 {
173 this.serverSocketList.remove(par1ServerSocket);
174 }
175
176 return var3;
177 }
178 }
179
180 /**
181 * Closes all of the opened sockets
182 */
183 protected void closeAllSockets()
184 {
185 this.closeAllSockets_do(false);
186 }
187
188 /**
189 * Closes all of the opened sockets
190 */
191 protected void closeAllSockets_do(boolean par1)
192 {
193 int var2 = 0;
194 Iterator var3 = this.socketList.iterator();
195
196 while (var3.hasNext())
197 {
198 DatagramSocket var4 = (DatagramSocket)var3.next();
199
200 if (this.closeSocket(var4, false))
201 {
202 ++var2;
203 }
204 }
205
206 this.socketList.clear();
207 var3 = this.serverSocketList.iterator();
208
209 while (var3.hasNext())
210 {
211 ServerSocket var5 = (ServerSocket)var3.next();
212
213 if (this.closeServerSocket_do(var5, false))
214 {
215 ++var2;
216 }
217 }
218
219 this.serverSocketList.clear();
220
221 if (par1 && 0 < var2)
222 {
223 this.logWarning("Force closed " + var2 + " sockets");
224 }
225 }
226 }