Ejemplo n.º 1
0
        // 发送消息请求
        public string SendRequest(ByteString body, int subcmd, NetResponseCallback response, Action <ResponseEvent> callback, string cmd, string seq)
        {
            if (seq.Length == 0)
            {
                seq = Guid.NewGuid().ToString();
                var sendQueueVal = new SendQueueValue {
                    Time         = DateTime.Now,
                    IsSocketSend = false,
                    Cmd          = (int)subcmd,
                    resend       = () => this.SendRequest(body, subcmd, response, callback, cmd, seq),
                    response     = msg => {
                        response(true, msg, callback);
                        DeleteSendQueue(seq);
                    }
                };
                sendQueueVal.sendSuccess = () => {
                    // if(Socket.Id == 1) Debugger.Log("handle send success {0}", seq);
                    sendQueueVal.IsSocketSend = true;
                };
                sendQueueVal.remove = () => {
                    DeleteSendQueue(seq);
                };
                sendQueueVal.sendFail = (errCode, errMsg) => {
                    var errMessage = "消息发送失败," + errMsg + "[" + errCode + "]";
                    var rspWrap1   = new ClientSendServerRspWrap1 {
                        Seq     = seq,
                        ErrCode = errCode,
                        ErrMsg  = errMessage
                    };
                    response(false, new DecodeRspResult {
                        RspWrap1 = rspWrap1,
                    }, callback);
                    DeleteSendQueue(seq);
                };
                AddSendQueue(seq, sendQueueVal);
            }

            // PB request = new PB();

            var qAppRequest = new ClientSendServerReqWrap1 {
                Version   = RequestHeader.Version,
                AppName   = RequestHeader.AppName,
                ClientIp  = RequestHeader.ClientIp,
                ServiceIp = RequestHeader.ServiceIp,
                Business  = RequestHeader.Business,
                AuthKey   = RequestHeader.AuthKey,
                AuthType  = RequestHeader.AuthType,
                AuthIp    = RequestHeader.AuthIp,
                GameId    = RequestHeader.GameId,
                Uid       = RequestHeader.Uid,
                PlayerId  = RequestHeader.PlayerId,
                Cmd       = cmd,
                Seq       = seq
            };
            var accessReq = new ClientSendServerReqWrap2();

            accessReq.Cmd = (ProtoCmd)subcmd;
            var data = Pb.EncodeReq(qAppRequest, accessReq, body);

            if (data.Length > _maxDataLength)
            {
                SendQueueValue val = null;
                SendQueue.TryGetValue(seq + "", out val);
                var timer = new Timer();
                timer.SetTimeout(() => {
                    if (val != null)
                    {
                        val.sendFail((int)QAppProtoErrCode.EcSdkSendFail, "数据长度超限");
                    }
                }, 0);
                return(seq);
            }

            var reqData = BuildData(data);

            return(this.Send(reqData, seq, (ProtoCmd)subcmd));
        }
Ejemplo n.º 2
0
 public static byte[] EncodeReq(ClientSendServerReqWrap1 wrap1, ClientSendServerReqWrap2 wrap2, ByteString data)
 {
     wrap2.Body = data;
     wrap1.Body = wrap2.ToByteString();
     return(wrap1.ToByteArray());
 }
Ejemplo n.º 3
0
 public static byte[] EncodeReq(ClientSendServerReqWrap1 wrap1, ClientSendServerReqWrap2 wrap2, GooglePB::IMessage data)
 {
     wrap2.Body = data.ToByteString();
     wrap1.Body = wrap2.ToByteString();
     return(wrap1.ToByteArray());
 }
Ejemplo n.º 4
0
 public Pb()
 {
     _appReq = new ClientSendServerReqWrap1();
     _clientSendServerReqWrap2 = new ClientSendServerReqWrap2();
 }