Main Page | Packages | Class Hierarchy | Class List | Directories | File List | Class Members

net.alhem.jsockets.SocketHandler Class Reference

Collaboration diagram for net.alhem.jsockets.SocketHandler:

Collaboration graph
[legend]
List of all members.

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< Socketm_sockets

Detailed Description

Author:
Anders Hedstrom (grymse@alhem.net)

Definition at line 41 of file SocketHandler.java.


Constructor & Destructor Documentation

net.alhem.jsockets.SocketHandler.SocketHandler  ) 
 

Creates a new instance of SocketHandler.

Definition at line 45 of file SocketHandler.java.

00046     {
00047         this(null);
00048     } // SocketHandler

net.alhem.jsockets.SocketHandler.SocketHandler StdLog  log  ) 
 

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


Member Function Documentation

void net.alhem.jsockets.SocketHandler.Add Socket  x  ) 
 

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

void net.alhem.jsockets.SocketHandler.LogError Socket  s,
String  usertxt,
int  errcode,
String  errtxt,
int  loglevel
 

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

void net.alhem.jsockets.SocketHandler.PrintSockets  ) 
 

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

void net.alhem.jsockets.SocketHandler.Select long  secs,
long  millisecs
 

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

boolean net.alhem.jsockets.SocketHandler.Valid Socket  x  ) 
 

Definition at line 202 of file SocketHandler.java.

00203     {
00204         return m_sockets.contains(x);
00205     } // Valid


Member Data Documentation

final int net.alhem.jsockets.SocketHandler.LOG_LEVEL_ERROR = 2 [static]
 

Definition at line 220 of file SocketHandler.java.

final int net.alhem.jsockets.SocketHandler.LOG_LEVEL_FATAL = 3 [static]
 

Definition at line 221 of file SocketHandler.java.

final int net.alhem.jsockets.SocketHandler.LOG_LEVEL_INFO = 0 [static]
 

Definition at line 218 of file SocketHandler.java.

final int net.alhem.jsockets.SocketHandler.LOG_LEVEL_WARNING = 1 [static]
 

Definition at line 219 of file SocketHandler.java.

StdLog net.alhem.jsockets.SocketHandler.m_log [private]
 

Definition at line 225 of file SocketHandler.java.

Selector net.alhem.jsockets.SocketHandler.m_selector [private]
 

Definition at line 224 of file SocketHandler.java.

Vector<Socket> net.alhem.jsockets.SocketHandler.m_sockets [private]
 

Definition at line 226 of file SocketHandler.java.


The documentation for this class was generated from the following file:
Generated on Fri Oct 29 14:11:18 2004 for Java Sockets by  doxygen 1.3.9.1