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链接中断"); } }
public void Send(MessageRequestBase req, Action <MessageResponseBase> action) { AddResAction(req.id, action); //发送数据 transport.Send(req); }