예제 #1
0
    public void Send(MessageRequestBase req)
    {
        //这里需要等待上一次发完,一般不会出现,因为发送时会屏蔽触摸,但是防止一些update每隔一段时间和后台请求
        if (IsSending)
        {
            sendQueue.Enqueue(req);
            return;
        }
        IsSending = true;
        ByteBuffer buffer = new ByteBuffer(true);

        //预先插入一个长度预留,数值随便写的
        buffer.WriteInt(0);
        //接口id
        buffer.WriteInt(req.id);
        req.Encode(buffer);
        byte[] bytes = buffer.ToArray();
        //把开头的预插入的长度修改为正确值,4为预先插入的长度
        byte[] lenBytes = BitConverter.GetBytes(bytes.Length - 4);
        //记得大小端翻转
        buffer.Reverse(lenBytes);
        //把开头的预插入的长度设为正确值
        for (int i = 0; i < lenBytes.Length; i++)
        {
            bytes[i] = lenBytes[i];
        }
        //发送
        if (socket.Connected)
        {
            socket.BeginSend(bytes, 0, bytes.Length, SocketFlags.None, OnSend, null);
        }
        else
        {
            //TODO
            Debug.LogError("socket链接中断");
        }
    }
예제 #2
0
 public void Send(MessageRequestBase req, Action <MessageResponseBase> action)
 {
     AddResAction(req.id, action);
     //发送数据
     transport.Send(req);
 }