Ejemplo n.º 1
0
    // Json 发送数据
    public static void Send(JsonMsgBase msg)
    {
        // 状态判断
        if (socket == null || !socket.Connected)
        {
            return;
        }

        if (isConnecting || isClosing)
        {
            return;
        }

        // 数据编码
        byte[] nameBytes = JsonMsgBase.EncodeName(msg);
        byte[] bodyBytes = JsonMsgBase.Encode(msg);
        int    len       = nameBytes.Length + bodyBytes.Length;

        byte[] sendBytes = new byte[2 + len];
        // 组装长度
        sendBytes[0] = (byte)(len % 256);
        sendBytes[1] = (byte)(len / 256);
        // 组装名字
        Array.Copy(nameBytes, 0, sendBytes, 2, nameBytes.Length);
        // 组装消息体
        Array.Copy(bodyBytes, 0, sendBytes, 2 + nameBytes.Length, bodyBytes.Length);
        // 写入队列
        ByteArray ba    = new ByteArray(sendBytes);
        int       count = 0;   // WriteQueue的长度

        lock (writeQueue) {
            writeQueue.Enqueue(ba);
            count = writeQueue.Count;
        }
        // send
        if (count == 1)
        {
            socket.BeginSend(sendBytes, 0, sendBytes.Length, 0, SendCallback, socket);
        }
    }