private void Send(int reqId, int resId, byte[] content, Action <int, ProtoPacket> callback) { //todo check network if (resId != 0) { //previous req is override, notify error if (mIdToOnceHandler.TryGetValue(resId, out var delegateObj)) { var error = ProtoPacket.CreateError(resId, (int)ErrorCode.req_override, string.Empty); if (delegateObj != null) { delegateObj.DynamicInvoke(resId, error); } mIdToOnceHandler.Remove(resId); } if (callback != null) { AddToHandler(resId, callback, mIdToOnceHandler); } var reqRecord = new ReqRecord(); reqRecord.reqId = reqId; reqRecord.resId = resId; reqRecord.reqTime = Time.realtimeSinceStartup; mIdToRecord.Add(resId, reqRecord); } mChannel.Send(SendBuf.From(DCGameProtocol.GetIntBuf(reqId)), SendBuf.From(content)); }