/// <summary> /// Dispose() /// </summary> public void Dispose() { if (_channel == null) { return; } _channel.Close(); _channel = null; }
/// <summary> /// 세션을 닫는다 /// 세션은 재활용될 수 있으므로 재활용을 고려하여야 한다 /// </summary> public virtual void Close() { _receivedPacketQueue.Complete(); _cts.Cancel(); try { _tcpChannel?.Close(); _udpChannel?.Close(); } catch (Exception ex) { OnError(ex); } }
/// <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; }