Public Member Functions | |
SocketHandler () | |
Creates a new instance of SocketHandler. | |
SocketHandler (StdLog log) | |
void | LogError (Socket s, String usertxt, int errcode, String errtxt, int loglevel) |
void | Select (long secs, long millisecs) |
void | Add (Socket x) |
boolean | Valid (Socket x) |
void | PrintSockets () |
Static Public Attributes | |
final int | LOG_LEVEL_INFO = 0 |
final int | LOG_LEVEL_WARNING = 1 |
final int | LOG_LEVEL_ERROR = 2 |
final int | LOG_LEVEL_FATAL = 3 |
Private Attributes | |
Selector | m_selector |
StdLog | m_log |
Vector< Socket > | m_sockets |
Definition at line 41 of file SocketHandler.java.
|
Creates a new instance of SocketHandler.
Definition at line 45 of file SocketHandler.java. 00046 { 00047 this(null); 00048 } // SocketHandler
|
|
Definition at line 50 of file SocketHandler.java. 00051 { 00052 m_log = log; 00053 try 00054 { 00055 m_selector = Selector.open(); 00056 } 00057 catch (java.io.IOException e) 00058 { 00059 LogError(null, "SocketHandler", 0, e.toString(), SocketHandler.LOG_LEVEL_FATAL); 00060 } 00061 m_sockets = new Vector<Socket>(); 00062 // 00063 System.out.println("m_log is " + ((m_log == null) ? "NULL" : "OK")); 00064 System.out.println("m_selector is " + ((m_selector == null) ? "NULL" : "OK")); 00065 } // SocketHandler
|
|
Definition at line 186 of file SocketHandler.java. References net.alhem.jsockets.Socket.GetChannel(), net.alhem.jsockets.Socket.OnInitialOps(), net.alhem.jsockets.Socket.SetKey(), and net.alhem.jsockets.Socket.toString(). Referenced by net.alhem.jsockets.ListenSocket.OnRead(). 00187 { 00188 SelectableChannel ch = x.GetChannel(); 00189 try 00190 { 00191 SelectionKey key = ch.register( m_selector, ch.validOps(), x); 00192 x.SetKey(key); 00193 x.OnInitialOps(); 00194 m_sockets.add(x); 00195 PrintSockets(); 00196 } catch (Exception e) 00197 { 00198 LogError(x, "Add", 0, e.toString(), SocketHandler.LOG_LEVEL_ERROR); 00199 } 00200 } // Add
|
|
Definition at line 67 of file SocketHandler.java. References net.alhem.jsockets.StdLog.error(). Referenced by net.alhem.jsockets.ListenSocket.Bind(), net.alhem.jsockets.Socket.OnAccept(), net.alhem.jsockets.Socket.OnConnect(), net.alhem.jsockets.TcpSocket.OnDelete(), net.alhem.jsockets.ListenSocket.OnDelete(), net.alhem.jsockets.TcpSocket.OnRead(), net.alhem.jsockets.Socket.OnRead(), net.alhem.jsockets.ListenSocket.OnRead(), net.alhem.jsockets.TcpSocket.OnWrite(), net.alhem.jsockets.Socket.OnWrite(), and net.alhem.jsockets.TcpSocket.Open(). 00068 { 00069 if (m_log != null) 00070 { 00071 m_log.error(this, s, usertxt, errcode, errtxt, loglevel); 00072 } 00073 } // LogError
|
|
Definition at line 207 of file SocketHandler.java. 00208 { 00209 System.out.println(getClass().getSimpleName() + ": Current socket list"); 00210 for (int i = 0; i < m_sockets.size(); i++) 00211 { 00212 Socket x = m_sockets.get(i); 00213 System.out.println(x); 00214 } 00215 } // PrintSockets
|
|
Definition at line 75 of file SocketHandler.java. References net.alhem.jsockets.Socket.CloseAndDelete(), net.alhem.jsockets.Socket.GetKey(), net.alhem.jsockets.Socket.LineProtocol(), net.alhem.jsockets.Socket.OnConnect(), net.alhem.jsockets.Socket.OnDelete(), net.alhem.jsockets.Socket.OnRead(), net.alhem.jsockets.Socket.OnWrite(), net.alhem.jsockets.Socket.ReadLine(), net.alhem.jsockets.Socket.SetConnecting(), and net.alhem.jsockets.Socket.Socket(). 00076 { 00077 // See if we've had any activity -- either 00078 // an incoming connection, or incoming data on an 00079 // existing connection 00080 try 00081 { 00082 int num = m_selector.select(secs * 1000 + millisecs); 00083 00084 // If we don't have any activity, loop around and wait 00085 // again 00086 if (num == 0) 00087 { 00088 return; 00089 } 00090 00091 // Get the keys corresponding to the activity 00092 // that has been detected, and process them 00093 // one by one 00094 Set keys = m_selector.selectedKeys(); 00095 Iterator it = keys.iterator(); 00096 while (it.hasNext()) 00097 { 00098 // Get a key representing one of bits of I/O 00099 // activity 00100 SelectionKey key = (SelectionKey)it.next(); 00101 00102 // What kind of activity is it? 00103 if ((key.readyOps() & SelectionKey.OP_READ) == SelectionKey.OP_READ) 00104 { 00105 SocketChannel ch = (SocketChannel)key.channel(); 00106 java.net.Socket ss = (java.net.Socket)ch.socket(); 00107 Socket s = (Socket)key.attachment(); 00108 if (s != null) 00109 { 00110 // System.out.println(s + ": OnRead"); 00111 s.OnRead(); 00112 if (s.LineProtocol()) 00113 { 00114 s.ReadLine(); // eat ibuf to m_line, calls OnLine 00115 } 00116 } 00117 } 00118 if ((key.readyOps() & SelectionKey.OP_WRITE) == SelectionKey.OP_WRITE) 00119 { 00120 SocketChannel ch = (SocketChannel)key.channel(); 00121 java.net.Socket ss = (java.net.Socket)ch.socket(); 00122 Socket s = (Socket)key.attachment(); 00123 if (s != null) 00124 { 00125 // System.out.println(s + ": OnWrite"); 00126 s.OnWrite(); 00127 } 00128 } 00129 if ((key.readyOps() & SelectionKey.OP_ACCEPT) == SelectionKey.OP_ACCEPT) 00130 { 00131 ServerSocketChannel ch = (ServerSocketChannel)key.channel(); 00132 java.net.ServerSocket ss = (java.net.ServerSocket)ch.socket(); 00133 Socket s = (Socket)key.attachment(); 00134 if (s != null) 00135 { 00136 // System.out.println(s + ": OnRead(ACCEPT)"); 00137 s.OnRead(); // ListenSocket.OnRead will call OnAccept on new Socket 00138 } 00139 } 00140 if ((key.readyOps() & SelectionKey.OP_CONNECT) == SelectionKey.OP_CONNECT) 00141 { 00142 SocketChannel ch = (SocketChannel)key.channel(); 00143 java.net.Socket ss = (java.net.Socket)ch.socket(); 00144 Socket s = (Socket)key.attachment(); 00145 if (s != null) 00146 { 00147 // System.out.println(s + ": OnConnect"); 00148 ch.finishConnect(); 00149 s.SetConnecting(false); 00150 s.GetKey().interestOps(SelectionKey.OP_READ); 00151 s.OnConnect(); 00152 } 00153 } 00154 00155 } // while 00156 keys.clear(); 00157 00158 // deregister 00159 it = m_selector.keys().iterator(); 00160 boolean bRemoved = false; 00161 while (it.hasNext()) 00162 { 00163 // Get a key representing one of bits of I/O 00164 // activity 00165 SelectionKey key = (SelectionKey)it.next(); 00166 Socket p = (Socket)key.attachment(); 00167 if (p.CloseAndDelete()) 00168 { 00169 p.OnDelete(); // OnDelete closes Channel 00170 key.cancel(); 00171 m_sockets.remove(p); // no longer Valid 00172 bRemoved = true; 00173 } 00174 } // while - check for delete 00175 if (bRemoved) 00176 { 00177 PrintSockets(); 00178 } 00179 00180 } catch ( java.io.IOException e) 00181 { 00182 LogError(null, "Select", 0, e.toString(), SocketHandler.LOG_LEVEL_ERROR); 00183 } 00184 } // Select
|
|
Definition at line 202 of file SocketHandler.java. 00203 { 00204 return m_sockets.contains(x); 00205 } // Valid
|
|
Definition at line 220 of file SocketHandler.java. |
|
Definition at line 221 of file SocketHandler.java. |
|
Definition at line 218 of file SocketHandler.java. |
|
Definition at line 219 of file SocketHandler.java. |
|
Definition at line 225 of file SocketHandler.java. |
|
Definition at line 224 of file SocketHandler.java. |
|
Definition at line 226 of file SocketHandler.java. |