Пример #1
0
 /// <summary>
 /// Send a DCC Chat request to a remote user and wait for a connection
 /// using timeout period specified.
 /// </summary>
 /// <remarks>
 /// <para>If the user does not respond within the timeout period the DccChatSession 
 /// will stop listening for a connection. The sesssion instance created then becomes
 /// invalid. This methods must be called again and a new instance created in order to
 /// initiate a try again.
 /// </para>
 /// <para>
 /// This method should be called from within a try/catch block 
 /// in case there are socket errors.
 /// </para>
 /// </remarks>
 /// <param name="dccUserInfo">A collection of information about the remote user.</param>
 /// <param name="listenIPAddress">The IP address that will be sent to the remote user. It must
 /// be in dotted quad format (i.e. 192.168.0.2). If the client is behind a NAT system then
 /// this should be the address of that system and not the local host.</param>
 /// <param name="listenPort">The TCP/IP port to listen on</param>
 /// <param name="timeout">How long to wait for a response in milliseconds.
 /// A value of zero will disable the timeout.</param>
 public static DccChatSession Request( DccUserInfo dccUserInfo, string listenIPAddress, int listenPort, long timeout )
 {
     Debug.WriteLineIf( DccUtil.DccTrace.TraceInfo, "[" + Thread.CurrentThread.Name +"] DccChatSession::Request()");
     //Create session object
     var session = new DccChatSession( dccUserInfo );
     session._listenPort = listenPort;
     //Start session Thread
     session._thread = new Thread(new ThreadStart( session.Listen ) );
     session._thread.Name = session.ToString();
     session._thread.Start();
     //Send Chat request to remote user
     session.SendChatRequest( listenIPAddress, listenPort );
     //Start timeout thread if timeout > 0
     if( timeout > 0 )
     {
         var timer = new Timer(
             session.TimerExpired,
             session,
             timeout,
             0);
         Debug.WriteLineIf( DccUtil.DccTrace.TraceInfo, "[" + Thread.CurrentThread.Name +"] DccChatSession::Request timeout thread started");
     }
     return session;
 }
Пример #2
0
 /// <summary>
 /// When another a remote user has sent a chat request, this
 /// method is called to accept the request and
 /// start a chat session with that user.
 /// </summary>
 /// <remarks>
 /// This method should be called from within a try/catch block 
 /// because there are many things that could prevent this
 /// connection attempt from succeeding.
 /// </remarks>
 /// <param name="dccUserInfo">A collection of information about the remote user.</param>
 /// <returns>The DccChatSession instance for this session.</returns>
 public static DccChatSession Accept( DccUserInfo dccUserInfo )
 {
     Debug.WriteLineIf( DccUtil.DccTrace.TraceInfo, "[" + Thread.CurrentThread.Name +"] DccChatSession::Accept()");
     var session = new DccChatSession( dccUserInfo );
     //Start session Thread
     session._thread = new Thread(session.Connect) {Name = session.ToString()};
     session._thread.Start();
     return session;
 }