Ejemplo n.º 1
0
        public static DecodeRspResult DecodeRsp(byte[] data, Func <string, int> getReqCmd)
        {
            var wrap1 = new ClientSendServerRspWrap1();

            wrap1.MergeFrom(data);
            var wrap2 = new ClientSendServerRspWrap2();

            wrap2.MergeFrom(wrap1.Body);

            object rsp = null;
            int    cmd = getReqCmd(wrap1.Seq);

            if (cmd > 0 && rspDic.ContainsKey(cmd) && wrap2.Body != null)
            {
                Func <ByteString, object> func = null;
                rspDic.TryGetValue(cmd, out func);

                if (func != null)
                {
                    rsp = func(wrap2.Body);
                }
            }

            var rspResult = new DecodeRspResult {
                RspWrap1 = new ClientSendServerRspWrap1(wrap1),
                RspWrap2 = new ClientSendServerRspWrap2(wrap2),
                Body     = rsp
            };

            return(rspResult);
        }
Ejemplo n.º 2
0
        // 确认登录
        public string CheckLogin(Action <ResponseEvent> callback, string tag)
        {
            if (this.RoomInfo == null || string.IsNullOrEmpty(this.RoomInfo.Id))
            {
                Debugger.Log("无房间信息");
                var rspWrap1 = new ClientSendServerRspWrap1 {
                    ErrCode = ErrCode.EcSdkNoRoom,
                    ErrMsg  = "无房间信息"
                };
                var res = new DecodeRspResult(rspWrap1, null, null);
                CheckLoginResponse(false, res, callback);
                return("");
            }
            CheckLoginStatus.SetStatus(CheckLoginStatus.StatusType.Checking);

            var       response = new NetResponseCallback(CheckLoginResponse);
            const int subcmd   = (int)ProtoCmd.ECmdCheckLoginReq;

            var para = new CheckLoginReq {
                Token   = RequestHeader.AuthKey,
                RouteId = this.RoomInfo.RouteId
            };

            var seq = this.NetUtil2.Send(para, subcmd, response, callback);

            CheckLoginStatus.SetRouteId(para.RouteId);
            Debugger.Log("CheckLogin_Para {0} {1}", para, seq);
            return(seq);
        }
Ejemplo n.º 3
0
        // 发送帧同步信息
        public string SendFrame(SendFrameReq para, Action <ResponseEvent> callback)
        {
            if (this.RoomInfo == null || string.IsNullOrEmpty(this.RoomInfo.Id))
            {
                var rspWrap1 = new ClientSendServerRspWrap1 {
                    ErrCode = ErrCode.EcSdkNoRoom,
                    ErrMsg  = "无房间信息"
                };
                var res = new DecodeRspResult(rspWrap1, null, null);
                this.SendFrameResponse(false, res, callback);
                return("");
            }
            this.AutoCheckLogin();

            var       response = new NetResponseCallback(this.SendFrameResponse);
            const int subcmd   = (int)ProtoCmd.ECmdRelaySendFrameReq;

            try {
                var seq = this.NetUtil2.Send(para, subcmd, response, callback);
                Debugger.Log("SendFrame_Para {0} {1}", para, seq);
                return(seq);
            } catch (System.Exception e) {
                Debugger.Log("Error: {0}", e.ToString());
                throw;
            }
        }
Ejemplo n.º 4
0
        public static DecodeRspResult DecodeRsp(byte[] data)
        {
            var wrap1 = new ClientSendServerRspWrap1();

            wrap1.MergeFrom(data);
            var wrap2 = new ClientSendServerRspWrap2();

            wrap2.MergeFrom(wrap1.Body);
            var rsp       = wrap2.Body;
            var rspResult = new DecodeRspResult {
                RspWrap1 = new ClientSendServerRspWrap1(wrap1),
                RspWrap2 = new ClientSendServerRspWrap2(wrap2),
                Body     = rsp
            };

            return(rspResult);
        }
Ejemplo n.º 5
0
        // 处理异常错误码
        // 返回 true 会拦截 responses 回调
        private bool HandleErrCode(ClientSendServerRspWrap1 res)
        {
            // Debugger.Log("handle errcode {0}", res.ErrCode);
            if (IsTokenError(res.ErrCode))
            {
                this.HandleTokenErr();
                Debugger.Log("TOKEN_ERROR", res);
                return(true);
            }

            if (IsRelayConnectError(res.ErrCode) && this.Socket.Id == (int)ConnectionType.Relay)
            {
                this.HandleRelayConnectErr();
                Debugger.Log("RELAY_CONNECT_ERROR", res);
                return(true);
            }

            return(false);
        }
Ejemplo n.º 6
0
        ///////////////////////////////// 请求 //////////////////////////////////
        // 帧同步开始
        public string StartFrameSync(StartFrameSyncReq para, Action <ResponseEvent> callback)
        {
            if (this.RoomInfo == null || string.IsNullOrEmpty(this.RoomInfo.Id))
            {
                var rspWrap1 = new ClientSendServerRspWrap1 {
                    ErrCode = ErrCode.EcSdkNoRoom,
                    ErrMsg  = "无房间信息"
                };
                var res = new DecodeRspResult(rspWrap1, null, null);
                StartFrameSyncResponse(false, res, callback);
                return("");
            }
            this.AutoCheckLogin();

            var       response = new NetResponseCallback(StartFrameSyncResponse);
            const int subcmd   = (int)ProtoCmd.ECmdStartFrameSyncReq;
            var       seq      = this.NetUtil1.Send(para.ToByteString(), subcmd, response, callback);

            return(seq);
        }
Ejemplo n.º 7
0
        // 发送自定义服务消息
        public string SendMessageExt(SendToGameSvrReq para, Action <ResponseEvent> callback)
        {
            if (this.RoomInfo == null || string.IsNullOrEmpty(this.RoomInfo.Id))
            {
                var rspWrap1 = new ClientSendServerRspWrap1 {
                    ErrCode = ErrCode.EcSdkNoRoom,
                    ErrMsg  = "无房间信息"
                };
                var res = new DecodeRspResult(rspWrap1, null, null);
                SendMessageExtResponse(false, res, callback);
                return("");
            }
            this.AutoCheckLogin();

            var       response = new NetResponseCallback(SendMessageExtResponse);
            const int subcmd   = (int)ProtoCmd.ECmdRelayClientSendtoGamesvrReq;
            var       seq      = this.NetUtil2.Send(para, subcmd, response, callback);

            Debugger.Log("SendMessageExt_Para {0} {1}", para, seq);
            return(seq);
        }
Ejemplo n.º 8
0
        // 请求补帧
        public string RequestFrame(RequestFrameReq para, Action <ResponseEvent> callback)
        {
            if (this.RoomInfo == null || string.IsNullOrEmpty(this.RoomInfo.Id))
            {
                var rspWrap1 = new ClientSendServerRspWrap1 {
                    ErrCode = ErrCode.EcSdkNoRoom,
                    ErrMsg  = "无房间信息"
                };
                var res = new DecodeRspResult(rspWrap1, null, null);
                RequestFrameResponse(false, res, callback);
                return("");
            }
            this.AutoCheckLogin();

            var       response = new NetResponseCallback(RequestFrameResponse);
            const int subcmd   = (int)ProtoCmd.ECmdRelayRequestFrameReq;
            var       seq      = this.NetUtil2.Send(para.ToByteString(), subcmd, response, callback);

            // Debugger.Log ("REQUESTFRAME_Para {0} {1}", para, seq);
            return(seq);
        }
Ejemplo n.º 9
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.º 10
0
 // public byte[] body;
 public DecodeRspResult(ClientSendServerRspWrap1 wrap1, ClientSendServerRspWrap2 wrap2, object data) : this()
 {
     RspWrap1 = wrap1;
     RspWrap2 = wrap2;
     Body     = data;
 }