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

net.alhem.jsockets.TcpSocket Class Reference

Buffered socket i/o. More...

Inheritance diagram for net.alhem.jsockets.TcpSocket:

Inheritance graph
[legend]
Collaboration diagram for net.alhem.jsockets.TcpSocket:

Collaboration graph
[legend]
List of all members.

Public Member Functions

 TcpSocket (SocketHandler h, int ilen, int olen)
 Creates a new instance of TcpSocket.
 TcpSocket (SocketHandler h)
Socket Create ()
void OnInitialOps ()
void Open (String host, int port)
void OnRead ()
void OnDelete ()
void ReadLine ()
void Send (String str)
void SendBuf (byte[] bbuf, int l)
void OnWrite ()

Protected Attributes

ByteBuffer m_ibuf
ByteBuffer m_obuf
StringBuffer m_line

Private Attributes

int m_ilen
int m_olen

Detailed Description

Buffered socket i/o.

Author:
Anders Hedstrom (grymse@alhem.net)

Definition at line 38 of file TcpSocket.java.


Constructor & Destructor Documentation

net.alhem.jsockets.TcpSocket.TcpSocket SocketHandler  h,
int  ilen,
int  olen
 

Creates a new instance of TcpSocket.

Definition at line 42 of file TcpSocket.java.

References net.alhem.jsockets.TcpSocket.m_ibuf, net.alhem.jsockets.TcpSocket.m_ilen, net.alhem.jsockets.TcpSocket.m_line, net.alhem.jsockets.TcpSocket.m_obuf, and net.alhem.jsockets.TcpSocket.m_olen.

Referenced by net.alhem.jsockets.TcpSocket.Create().

00043     {
00044         super(h);
00045         m_ilen = ilen;
00046         m_ibuf = ByteBuffer.allocate(ilen);
00047         m_olen = olen;
00048         m_obuf = ByteBuffer.allocate(olen);
00049         m_line = new StringBuffer(4096);
00050     } // TcpSocket

net.alhem.jsockets.TcpSocket.TcpSocket SocketHandler  h  ) 
 

Definition at line 51 of file TcpSocket.java.

00052     {
00053         this(h, 16384, 30000);
00054     }


Member Function Documentation

Socket net.alhem.jsockets.TcpSocket.Create  )  [virtual]
 

Implements net.alhem.jsockets.Socket.

Reimplemented in net.alhem.jsockets.HttpGetSocket.

Definition at line 55 of file TcpSocket.java.

References net.alhem.jsockets.Socket.Handler(), net.alhem.jsockets.TcpSocket.m_ilen, net.alhem.jsockets.TcpSocket.m_olen, and net.alhem.jsockets.TcpSocket.TcpSocket().

00056     {
00057         return new TcpSocket(Handler(), m_ilen, m_olen);
00058     } // Create

void net.alhem.jsockets.TcpSocket.OnDelete  ) 
 

Reimplemented from net.alhem.jsockets.Socket.

Definition at line 131 of file TcpSocket.java.

References net.alhem.jsockets.Socket.GetChannel(), net.alhem.jsockets.Socket.Handler(), and net.alhem.jsockets.SocketHandler.LogError().

00132     {
00133         SocketChannel sc = (SocketChannel)GetChannel();
00134         try
00135         {
00136             sc.close();
00137         }
00138         catch (IOException e)
00139         {
00140             Handler().LogError(this, "OnDelete", 0, e.toString(), SocketHandler.LOG_LEVEL_ERROR);
00141         }
00142     } // OnDelete

void net.alhem.jsockets.TcpSocket.OnInitialOps  )  [virtual]
 

Implements net.alhem.jsockets.Socket.

Definition at line 59 of file TcpSocket.java.

References net.alhem.jsockets.Socket.Connecting(), and net.alhem.jsockets.Socket.GetKey().

00060     {
00061         if (Connecting())
00062         {
00063             GetKey().interestOps(SelectionKey.OP_CONNECT);
00064         }
00065         else
00066         {
00067             GetKey().interestOps(SelectionKey.OP_READ);
00068         }
00069     } // OnInitialOps

void net.alhem.jsockets.TcpSocket.OnRead  ) 
 

Reimplemented from net.alhem.jsockets.Socket.

Reimplemented in net.alhem.jsockets.HTTPSocket.

Definition at line 96 of file TcpSocket.java.

References net.alhem.jsockets.Socket.GetChannel(), net.alhem.jsockets.Socket.Handler(), net.alhem.jsockets.SocketHandler.LogError(), net.alhem.jsockets.TcpSocket.m_ibuf, net.alhem.jsockets.Socket.OnRawData(), and net.alhem.jsockets.Socket.SetCloseAndDelete().

00097     {
00098         m_ibuf.clear();
00099         try
00100         {
00101             SocketChannel sc = (SocketChannel)GetChannel();
00102             int n = sc.read(m_ibuf);
00103             m_ibuf.flip();
00104             if (n == -1)
00105             {
00106                 Handler().LogError(this, "OnRead", 0, "error while reading", SocketHandler.LOG_LEVEL_FATAL);
00107                 SetCloseAndDelete();
00108             }
00109             else
00110                 if (n == 0)
00111                 {
00112                 }
00113                 else
00114                     if (n > 0 && n == m_ibuf.limit() )
00115                     {
00116                         OnRawData(m_ibuf, n);
00117                     }
00118                     else
00119                     {
00120                         Handler().LogError(this, "OnRead", 0, "ibuf.limit != n (buffer cleared)", SocketHandler.LOG_LEVEL_ERROR);
00121                         m_ibuf.clear();
00122                     }
00123         }
00124         catch (Exception e)
00125         {
00126             Handler().LogError(this, "OnRead", 0, e.toString(), SocketHandler.LOG_LEVEL_FATAL);
00127             SetCloseAndDelete();
00128         }
00129     } // OnRead

void net.alhem.jsockets.TcpSocket.OnWrite  ) 
 

Reimplemented from net.alhem.jsockets.Socket.

Definition at line 181 of file TcpSocket.java.

References net.alhem.jsockets.Socket.GetChannel(), net.alhem.jsockets.Socket.Handler(), net.alhem.jsockets.SocketHandler.LogError(), net.alhem.jsockets.TcpSocket.m_obuf, and net.alhem.jsockets.Socket.SetCloseAndDelete().

Referenced by net.alhem.jsockets.TcpSocket.SendBuf().

00182     {
00183         m_obuf.flip();
00184         try
00185         {
00186             SocketChannel sc = (SocketChannel)GetChannel();
00187             int n = sc.write(m_obuf);
00188             System.out.println(n + " bytes written");
00189         }
00190         catch (Exception e)
00191         {
00192             Handler().LogError(this, "OnWrite", 0, e.toString(), SocketHandler.LOG_LEVEL_FATAL);
00193             SetCloseAndDelete();
00194         }
00195     } // OnWrite

void net.alhem.jsockets.TcpSocket.Open String  host,
int  port
 

Definition at line 71 of file TcpSocket.java.

References net.alhem.jsockets.Socket.attach(), net.alhem.jsockets.Socket.Handler(), net.alhem.jsockets.SocketHandler.LogError(), net.alhem.jsockets.Socket.SetCloseAndDelete(), and net.alhem.jsockets.Socket.SetConnecting().

00072     {
00073         InetSocketAddress isa = new InetSocketAddress(host, port);
00074         try
00075         {
00076             SocketChannel sc = SocketChannel.open();
00077             //        SocketChannel sc = (SocketChannel)GetChannel();
00078             sc.configureBlocking(false);
00079             if (!sc.connect(isa))
00080             {
00081                 SetConnecting();
00082             }
00083             else
00084             {
00085                 // connection immediately ok
00086             }
00087             attach(sc);
00088         }
00089         catch (java.io.IOException e)
00090         {
00091             Handler().LogError(this, "Open", 0, e.toString(), SocketHandler.LOG_LEVEL_FATAL);
00092             SetCloseAndDelete();
00093         }
00094     } // Open

void net.alhem.jsockets.TcpSocket.ReadLine  ) 
 

Reimplemented from net.alhem.jsockets.Socket.

Reimplemented in net.alhem.jsockets.HTTPSocket.

Definition at line 144 of file TcpSocket.java.

References net.alhem.jsockets.TcpSocket.m_ibuf, net.alhem.jsockets.TcpSocket.m_line, and net.alhem.jsockets.Socket.OnLine().

00145     {
00146         for (int i = 0; i < m_ibuf.limit(); ++i)
00147         {
00148             byte b = m_ibuf.get( i );
00149             String aChar = new Character((char)b).toString();
00150             switch (b)
00151             {
00152                 case 13: // ignore CR
00153                     break;
00154                 case 10: // LF
00155                     OnLine( m_line.toString() );
00156                     m_line.delete(0, m_line.length());
00157                     break;
00158                 default:
00159                     m_line.append(aChar);
00160             }
00161         } // while
00162     }

void net.alhem.jsockets.TcpSocket.Send String  str  ) 
 

Definition at line 164 of file TcpSocket.java.

References net.alhem.jsockets.TcpSocket.SendBuf().

Referenced by net.alhem.jsockets.HttpGetSocket.OnConnect().

00165     {
00166         byte[] bbuf = str.getBytes();
00167         SendBuf(bbuf, bbuf.length);
00168     } // Send

void net.alhem.jsockets.TcpSocket.SendBuf byte[]  bbuf,
int  l
 

Definition at line 170 of file TcpSocket.java.

References net.alhem.jsockets.TcpSocket.m_obuf, and net.alhem.jsockets.TcpSocket.OnWrite().

Referenced by net.alhem.jsockets.TcpSocket.Send().

00171     {
00172         int n = 0; // assume obuf empty
00173         m_obuf.clear(); // make assumption valid and break buffered output
00174         m_obuf.put(bbuf);
00175         if (n == 0)
00176         {
00177             OnWrite();
00178         }
00179     } // SendBuf


Member Data Documentation

ByteBuffer net.alhem.jsockets.TcpSocket.m_ibuf [protected]
 

Definition at line 200 of file TcpSocket.java.

Referenced by net.alhem.jsockets.TcpSocket.OnRead(), net.alhem.jsockets.TcpSocket.ReadLine(), and net.alhem.jsockets.TcpSocket.TcpSocket().

int net.alhem.jsockets.TcpSocket.m_ilen [private]
 

Definition at line 198 of file TcpSocket.java.

Referenced by net.alhem.jsockets.TcpSocket.Create(), and net.alhem.jsockets.TcpSocket.TcpSocket().

StringBuffer net.alhem.jsockets.TcpSocket.m_line [protected]
 

Definition at line 202 of file TcpSocket.java.

Referenced by net.alhem.jsockets.TcpSocket.ReadLine(), and net.alhem.jsockets.TcpSocket.TcpSocket().

ByteBuffer net.alhem.jsockets.TcpSocket.m_obuf [protected]
 

Definition at line 201 of file TcpSocket.java.

Referenced by net.alhem.jsockets.TcpSocket.OnWrite(), net.alhem.jsockets.TcpSocket.SendBuf(), and net.alhem.jsockets.TcpSocket.TcpSocket().

int net.alhem.jsockets.TcpSocket.m_olen [private]
 

Definition at line 199 of file TcpSocket.java.

Referenced by net.alhem.jsockets.TcpSocket.Create(), and net.alhem.jsockets.TcpSocket.TcpSocket().


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