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);
        }
    }
Esempio n. 2
0
        static void CallSend(Socket sock, string msg)
        {
            var   bytes    = Encoding.UTF8.GetBytes(msg);
            Int16 bodyLen  = (Int16)bytes.Length;
            var   lenBytes = BitConverter.GetBytes(bodyLen);

            if (!BitConverter.IsLittleEndian)// 小端发送
            {
                Array.Reverse(lenBytes);
            }

            var data = new byte[2 + bytes.Length];

            Array.Copy(lenBytes, data, 2);
            Array.Copy(bytes, 0, data, 2, bytes.Length);
            var ba = _wQueue.EnqueueFrom(data);

            if (_wQueue.Count == 1)
            {
                sock.BeginSend(ba.bytes, 0, ba.Length, 0, SendCB, sock);
            }
        }