
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. |
1.3.9.1