/// <summary>
 ///     Dispose()
 /// </summary>
 public void Dispose()
 {
     if (_channel == null)
     {
         return;
     }
     _channel.Close();
     _channel = null;
 }
示例#2
0
        /// <summary>
        /// 세션을 닫는다
        /// 세션은 재활용될 수 있으므로 재활용을 고려하여야 한다
        /// </summary>
        public virtual void Close()
        {
            _receivedPacketQueue.Complete();
            _cts.Cancel();

            try
            {
                _tcpChannel?.Close();
                _udpChannel?.Close();
            }
            catch (Exception ex)
            {
                OnError(ex);
            }
        }
示例#3
0
        /// <summary>
        /// 서버와 접속을 해제하고 리소스를 해제한다
        /// </summary>
        public void Close()
        {
            OnSessionClosed();

            try
            {
                _cts.Cancel();
            }
            catch
            {
            }

            NetPacket poolingPacket = null;

            while (_receivedPacketQueue.TryDequeue(out poolingPacket) == true &&
                   poolingPacket != null)
            {
                NetPool.PacketPool.Free(poolingPacket);
            }

            try
            {
                _tcpChannel?.Close();
                _udpChannel?.Close();

                _p2pGroup?.Close();
                _p2pGroup = null;

                if (_connectUdpLoopTask != null)
                {
                    _connectUdpLoopTask = null;
                }

                _udpSocket?.Close(false);
                _udpSocket = null;

                _request.Close();
            }
            catch
            {
            }

            _socket         = null;
            _isUdpConnected = false;
        }