[Csharp-classlib-cvs] main/src/classes clsDirectoryScanner.cs,1.1,1.2 clsTCPServer.cs,1.1,1.2
Status: Inactive
Brought to you by:
generalpd
From: Marcel K. <gen...@us...> - 2005-06-02 05:51:59
|
Update of /cvsroot/csharp-classlib/main/src/classes In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv31569/src/classes Modified Files: clsDirectoryScanner.cs clsTCPServer.cs Log Message: - if you set less than 1 MaxConnection, an exception is thorwn - added 2nd parameter socket to pOnError - moved disconnecting process to pOnDisconnect - now the class can tell what socket represents a disconnection and tells it the event OnDisconnect - some code improvments - made mor code documentation Index: clsDirectoryScanner.cs =================================================================== RCS file: /cvsroot/csharp-classlib/main/src/classes/clsDirectoryScanner.cs,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** clsDirectoryScanner.cs 3 May 2005 12:59:55 -0000 1.1 --- clsDirectoryScanner.cs 2 Jun 2005 05:51:50 -0000 1.2 *************** *** 44,52 **** * \note * $Log$ * Revision 1.1 2005/05/03 12:59:55 generalpd * first import * */ - public class DirectoryScanner : System.Object { --- 44,60 ---- * \note * $Log$ + * Revision 1.2 2005/06/02 05:51:50 generalpd + * - if you set less than 1 MaxConnection, an exception is thorwn + * - added 2nd parameter socket to pOnError + * - moved disconnecting process to pOnDisconnect + * - now the class can tell what socket represents a disconnection and tells it the event OnDisconnect + * + * - some code improvments + * - made mor code documentation + * * Revision 1.1 2005/05/03 12:59:55 generalpd * first import * */ public class DirectoryScanner : System.Object { Index: clsTCPServer.cs =================================================================== RCS file: /cvsroot/csharp-classlib/main/src/classes/clsTCPServer.cs,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** clsTCPServer.cs 13 May 2005 05:37:31 -0000 1.1 --- clsTCPServer.cs 2 Jun 2005 05:51:50 -0000 1.2 *************** *** 41,50 **** * \note * $Log$ * Revision 1.1 2005/05/13 05:37:31 generalpd * - added TCP Server class * - * */ ! public class TCPServer : System.Object { /// Listening socket --- 41,58 ---- * \note * $Log$ + * Revision 1.2 2005/06/02 05:51:50 generalpd + * - if you set less than 1 MaxConnection, an exception is thorwn + * - added 2nd parameter socket to pOnError + * - moved disconnecting process to pOnDisconnect + * - now the class can tell what socket represents a disconnection and tells it the event OnDisconnect + * + * - some code improvments + * - made mor code documentation + * * Revision 1.1 2005/05/13 05:37:31 generalpd * - added TCP Server class * */ ! public class TCPServer : System.Object { /// Listening socket *************** *** 70,74 **** public event AcceptHandler OnAccept; /// Disconnect-Event-Handler-Struct ! public delegate void DisconnectHandler(System.Object sender); /// Disconnect-Event-Handler public event DisconnectHandler OnDisconnect; --- 78,82 ---- public event AcceptHandler OnAccept; /// Disconnect-Event-Handler-Struct ! public delegate void DisconnectHandler(System.Object sender, System.Net.Sockets.Socket socket); /// Disconnect-Event-Handler public event DisconnectHandler OnDisconnect; *************** *** 92,96 **** this.MaxConnections = 10; this.Port = 23; ! this.BufferSize = 1024; this.m_oTimer = null; --- 100,104 ---- this.MaxConnections = 10; this.Port = 23; ! this.BufferSize = 2050; this.m_oTimer = null; *************** *** 98,102 **** } ! /*! \fn System.Int32 BufferSize * \brief Retirns or sets the buffer size * --- 106,110 ---- } ! /*! \fn System.UInt32 BufferSize * \brief Retirns or sets the buffer size * *************** *** 129,136 **** System.Int32 i = 0; ! this.m_iMaximumConnections = value; this.m_oConnections = new System.Net.Sockets.Socket[this.m_iMaximumConnections]; - // init new sockets this.m_oSocketBuffers = new System.Collections.ArrayList(); for (i = 0; i < this.m_oConnections.GetLength(0); i++) --- 137,147 ---- System.Int32 i = 0; ! if (value <= 0) ! // we need more than 0 max. connections! ! throw ( new System.ArgumentException(" Invalid number of maximum connections! ", "") ); ! ! this.m_iMaximumConnections = value; this.m_oConnections = new System.Net.Sockets.Socket[this.m_iMaximumConnections]; this.m_oSocketBuffers = new System.Collections.ArrayList(); for (i = 0; i < this.m_oConnections.GetLength(0); i++) *************** *** 178,182 **** this.m_oTCPListener.Start(); ! // set timer that checks for pending connections this.m_oTimer = new System.Timers.Timer(125); this.m_oTimer.Elapsed += new System.Timers.ElapsedEventHandler(this.m_oTimer_Elapsed); --- 189,193 ---- this.m_oTCPListener.Start(); ! // init timer that checks if connections are pending this.m_oTimer = new System.Timers.Timer(125); this.m_oTimer.Elapsed += new System.Timers.ElapsedEventHandler(this.m_oTimer_Elapsed); *************** *** 185,189 **** catch (System.Exception e) { ! this.pOnError(e); } } --- 196,200 ---- catch (System.Exception e) { ! this.pOnError(e, null); } } *************** *** 196,217 **** { try ! { ! this.m_oTCPListener = null; ! ! this.MaxConnections = this.MaxConnections; } catch (System.Exception e) { ! this.pOnError(e); } } ! /*! \fn void pOnError (System.Exception e) ! * \brief Handles especially socket exceptions ! * * \param e The exception * */ ! private void pOnError (System.Exception e) { if ("system.net.sockets.socketexception" == e.GetType().FullName.Trim().ToLower()) --- 207,227 ---- { try ! { ! this.m_oTCPListener.Stop(); } catch (System.Exception e) { ! this.pOnError(e, null); } } ! /*! \fn void pOnError (System.Exception e, System.Net.Sockets.Socket socket) ! * \brief Handles exceptions ! * * \param e The exception + * \param socket The socket, if not null, that throwed the exception * */ ! private void pOnError (System.Exception e, System.Net.Sockets.Socket socket) { if ("system.net.sockets.socketexception" == e.GetType().FullName.Trim().ToLower()) *************** *** 222,232 **** ) { ! // remote closed connection ! ! if (null != this.OnDisconnect) ! // invoke the event(s) ! this.OnDisconnect(this); ! ! this.ClearConnections(); return; --- 232,237 ---- ) { ! // remote closed connection ! this.pOnDisconnect(socket); return; *************** *** 240,244 **** } ! /*! \fn private void InitListenSocket () * \brief Inits the listening socket with all stuff * --- 245,249 ---- } ! /*! \fn void InitListenSocket () * \brief Inits the listening socket with all stuff * *************** *** 246,250 **** private void InitListenSocket () { ! this.m_oTCPListener = new System.Net.Sockets.TcpListener(this.Port); } --- 251,255 ---- private void InitListenSocket () { ! this.m_oTCPListener = new System.Net.Sockets.TcpListener(System.Net.IPAddress.Any, this.Port); } *************** *** 258,275 **** private void m_oTimer_Elapsed (System.Object sender, System.Timers.ElapsedEventArgs e) { try { if (this.m_oTCPListener.Pending()) { System.Int32 i = 0; ! System.Net.Sockets.Socket s = this.m_oTCPListener.AcceptSocket(); System.Boolean boolFoundFreeSocket = false; this.ClearConnections(); for (i = 0; i < this.Connections.GetLength(0); i++) { if (null == this.Connections[i]) ! { if (null != this.OnAccept) this.OnAccept(this, s); --- 263,288 ---- private void m_oTimer_Elapsed (System.Object sender, System.Timers.ElapsedEventArgs e) { + System.Net.Sockets.Socket s = null; + try { if (this.m_oTCPListener.Pending()) { + // wating connections + System.Int32 i = 0; ! s = this.m_oTCPListener.AcceptSocket(); System.Boolean boolFoundFreeSocket = false; this.ClearConnections(); + // search for free socket for (i = 0; i < this.Connections.GetLength(0); i++) { if (null == this.Connections[i]) ! { ! // found free socket ! if (null != this.OnAccept) + // invoke the event this.OnAccept(this, s); *************** *** 280,285 **** } ! boolFoundFreeSocket = true; ! break; } --- 293,297 ---- } ! boolFoundFreeSocket = true; break; } *************** *** 287,290 **** --- 299,303 ---- if (!boolFoundFreeSocket) + // no more connections! s.Close(); } *************** *** 292,296 **** catch (System.Exception e2) { ! this.pOnError(e2); } --- 305,309 ---- catch (System.Exception e2) { ! this.pOnError(e2, s); } *************** *** 317,323 **** /*! \fn void pOnReceive ( System.IAsyncResult ar ) ! * \brief Async callback for data receive ! * ! * \param ar Async result * */ --- 330,336 ---- /*! \fn void pOnReceive ( System.IAsyncResult ar ) ! * \brief Async callback for receiving data ! * ! * \param ar Async callback results * */ *************** *** 334,345 **** if ( this.Connections[i].Equals(ar.AsyncState) ) { ! iBytesRead = this.Connections[i].EndReceive(ar); ! bBuffer = new System.Byte[iBytesRead]; ! System.Array.Copy((System.Byte[])m_oSocketBuffers[i], bBuffer, bBuffer.GetLength(0)); ! ! if (null != this.OnReceive) ! this.OnReceive(this, this.Connections[i], bBuffer); ! this.Connections[i].BeginReceive((System.Byte[])m_oSocketBuffers[i], 0, this.BufferSize, System.Net.Sockets.SocketFlags.None, new System.AsyncCallback(this.pOnReceive), this.Connections[i]); break; --- 347,372 ---- if ( this.Connections[i].Equals(ar.AsyncState) ) { ! // receive data ! iBytesRead = this.Connections[i].EndReceive(ar); ! if (iBytesRead > 0) ! { ! bBuffer = new System.Byte[iBytesRead]; ! System.Array.Copy((System.Byte[])m_oSocketBuffers[i], bBuffer, bBuffer.GetLength(0)); ! ! if (null != this.OnReceive) ! // invoke event ! this.OnReceive(this, this.Connections[i], bBuffer); ! } ! if (null != this.Connections[i]) ! { ! if (this.Connections[i].Connected) ! // is still connected => list for data ! this.Connections[i].BeginReceive((System.Byte[])m_oSocketBuffers[i], 0, this.BufferSize, System.Net.Sockets.SocketFlags.None, new System.AsyncCallback(this.pOnReceive), this.Connections[i]); ! else ! this.pOnDisconnect(this.Connections[i]); ! } ! else ! this.pOnDisconnect(this.Connections[i]); break; *************** *** 349,354 **** catch (System.Exception e) { ! this.pOnError(e); ! } return; --- 376,398 ---- catch (System.Exception e) { ! this.pOnError(e, (System.Net.Sockets.Socket)ar.AsyncState); ! } ! ! return; ! } ! ! /*! \fn void pOnDisconnect( System.Net.Sockets.Socket socket ) ! * \brief Called if a socket connecting closed ! * ! * \param socket The socket that represents the connection (HINT: Can also be null!) ! * ! */ ! private void pOnDisconnect( System.Net.Sockets.Socket socket ) ! { ! if (null != this.OnDisconnect) ! // invoke the event(s) ! this.OnDisconnect(this, socket); ! ! this.ClearConnections(); return; |