public void Close(string msg = null) { if (_isCloseing || _socket == null) { return; } lock (_socket) { if (!_socket.Connected) { _socket = null; NetEventDispatcher.Trigger(NetEvent.Close, msg); return; } if (_sendQueue.Count > 0) { _isCloseing = true; } else { _socket.Close(); _socket = null; NetEventDispatcher.Trigger(NetEvent.Close, msg); } } }
private void ConnectCallback(IAsyncResult ar) { try { Socket sock = ar.AsyncState as Socket; sock.EndConnect(ar); NetEventDispatcher.Trigger(NetEvent.ConnectSuccess, null); sock.BeginReceive(_recBuffer.Bytes, _recBuffer.WriteIdx, _recBuffer.Remain, 0, ReceiveCallback, sock); } catch (Exception e) { _socket = null; NetEventDispatcher.Trigger(NetEvent.ConnectFail, e.ToString()); } finally { _isConnecting = false; } }