예제 #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="dccUser">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(DccUser dccUser, string listenIPAddress, int listenPort, long timeout)
        {
            Debug.WriteLineIf(DccUtil.DccTrace.TraceInfo, "[" + Thread.CurrentThread.Name + "] DccChatSession::Request()");
            //Create session object
            DccChatSession session = new DccChatSession(dccUser);

            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)
            {
                Timer timer = new Timer(
                    new TimerCallback(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="dccUser">A collection of information about the remote user.</param>
        /// <returns>The DccChatSession instance for this session.</returns>
        public static DccChatSession Accept(DccUser dccUser)
        {
            Debug.WriteLineIf(DccUtil.DccTrace.TraceInfo, "[" + Thread.CurrentThread.Name + "] DccChatSession::Accept()");
            DccChatSession session = new DccChatSession(dccUser);

            //Start session Thread
            session.thread      = new Thread(new ThreadStart(session.Connect));
            session.thread.Name = session.ToString();
            session.thread.Start();
            return(session);
        }
예제 #3
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="dccUser">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(DccUser dccUser, string listenIPAddress, int listenPort, long timeout)
 {
     Debug.WriteLineIf(DccUtil.DccTrace.TraceInfo, "[" + Thread.CurrentThread.Name + "] DccChatSession::Request()");
     //Create session object
     DccChatSession session = new DccChatSession(dccUser);
     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)
     {
         Timer timer = new Timer(
             new TimerCallback(session.TimerExpired),
             session,
             timeout,
             0);
         Debug.WriteLineIf(DccUtil.DccTrace.TraceInfo, "[" + Thread.CurrentThread.Name + "] DccChatSession::Request timeout thread started");
     }
     return session;
 }
예제 #4
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="dccUser">A collection of information about the remote user.</param>
 /// <returns>The DccChatSession instance for this session.</returns>
 public static DccChatSession Accept(DccUser dccUser)
 {
     Debug.WriteLineIf(DccUtil.DccTrace.TraceInfo, "[" + Thread.CurrentThread.Name + "] DccChatSession::Accept()");
     DccChatSession session = new DccChatSession(dccUser);
     //Start session Thread
     session.thread = new Thread(new ThreadStart(session.Connect));
     session.thread.Name = session.ToString();
     session.thread.Start();
     return session;
 }