001    package net.minecraft.src;
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 i */
013        protected boolean running = false;
014    
015        /** Reference to the server 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.doLogInfoEvent())
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 information message
058         */
059        protected void logInfo(String par1Str)
060        {
061            this.server.logInfoEvent(par1Str);
062        }
063    
064        /**
065         * Log message
066         */
067        protected void log(String par1Str)
068        {
069            this.server.logInfoMessage(par1Str);
070        }
071    
072        /**
073         * Log warning message
074         */
075        protected void logWarning(String par1Str)
076        {
077            this.server.logWarningMessage(par1Str);
078        }
079    
080        /**
081         * Log severe error message
082         */
083        protected void logSevere(String par1Str)
084        {
085            this.server.logSevereEvent(par1Str);
086        }
087    
088        /**
089         * Returns the number of players on the server
090         */
091        protected int getNumberOfPlayers()
092        {
093            return this.server.getPlayerListSize();
094        }
095    
096        /**
097         * Registers a DatagramSocket with this thread
098         */
099        protected void registerSocket(DatagramSocket par1DatagramSocket)
100        {
101            this.logInfo("registerSocket: " + par1DatagramSocket);
102            this.socketList.add(par1DatagramSocket);
103        }
104    
105        /**
106         * Closes the specified Da
107         */
108        protected boolean closeSocket(DatagramSocket par1DatagramSocket, boolean par2)
109        {
110            this.logInfo("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.logInfo("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.clos(false);
186        }
187    
188        protected void clos(boolean par1)
189        {
190            int var2 = 0;
191            Iterator var3 = this.socketList.iterator();
192    
193            while (var3.hasNext())
194            {
195                DatagramSocket var4 = (DatagramSocket)var3.next();
196    
197                if (this.closeSocket(var4, false))
198                {
199                    ++var2;
200                }
201            }
202    
203            this.socketList.clear();
204            var3 = this.serverSocketList.iterator();
205    
206            while (var3.hasNext())
207            {
208                ServerSocket var5 = (ServerSocket)var3.next();
209    
210                if (this.closeServerSocket_do(var5, false))
211                {
212                    ++var2;
213                }
214            }
215    
216            this.serverSocketList.clear();
217    
218            if (par1 && 0 < var2)
219            {
220                this.logWarning("Force closed " + var2 + " sockets");
221            }
222        }
223    }