public void Send(object msg)
    {
        if (_socket == null || !_socket.Connected || _isConnecting || _isCloseing)
        {
            return;
        }

        var sendBytes = Packer.Encode(msg);

        _sendQueue.EnqueueFrom(sendBytes);
        if (_sendQueue.Count == 1)
        {
            var node = _sendQueue.Peek();
            _socket.BeginSend(node.Bytes, node.ReadIdx, node.Length, 0, SendCallback, _socket);
        }
    }