Пример #1
0
        public static T CreateHttpProxy <T>(Type obj, string methodName, List <string> args, short gameId)
        {
            ClientHttpRequsetIoMessage ioMessage = new ClientHttpRequsetIoMessage();

            ioMessage.interfaceName = obj.FullName;
            ioMessage.methodName    = methodName;
            // client.args = JsonConvert.SerializeObject(callMessage.Args);
            if (args != null)
            {
                ioMessage.args = JsonMapper.ToJson(args);
            }
            else
            {
                ioMessage.args = null;
            }
            HttpIoMessage resultMessage = HttpSocketImpl.getInstance().sync(ioMessage, gameId);

            if (resultMessage != null)
            {
                if (resultMessage.resultCode == 200)
                {
                    // object o = JsonConvert.DeserializeObject(resultMessage.msg, returnType);
                    object o = JsonMapper.DeserializeObject(resultMessage.msg, typeof(T));
                    return((T)o);
                }
                else if (resultMessage.resultCode == 404)
                {
                    //异常处理
                    ErrorImpl error     = new ErrorImpl();
                    string[]  strs      = resultMessage.msg.Split(',');
                    string[]  errMsg    = null;
                    int       errorCode = 0;
                    if (strs.Length > 1)
                    {
                        errorCode = int.Parse(strs[0]);
                        errMsg    = new string[strs.Length - 1];
                        for (int i = 1; i < strs.Length; i++)
                        {
                            errMsg[i - 1] = strs[i];
                        }
                    }
                    else if (strs.Length == 1)
                    {
                        errorCode = int.Parse(strs[0]);
                    }
                    error.err(errorCode, errMsg);
                    return(default(T));
                }
                return(default(T));
            }
            else
            {
                return(default(T));
            }
        }
Пример #2
0
        public override object sync(IoMessage ioMessage)
        {
            var request = new UnityWebRequest("http://127.0.0.1:8888/game/handle", "POST");

            byte[]    buf = ProtostuffUtils.ProtobufSerialize(ioMessage);
            ByteArray arr = new ByteArray();

            arr.WriteInt(-777888);//包头
            arr.WriteShort(1);
            arr.WriteShort((short)buf.Length);
            arr.WriteBytes(buf);
            request.uploadHandler   = new UploadHandlerRaw(arr.Buffer);
            request.downloadHandler = new DownloadHandlerBuffer();
            request.SetRequestHeader("Content-Type", "application/octet-stream");
            request.SendWebRequest();
            Debug.Log("发送完成");
            if (request.responseCode == 200)
            {
                ByteArray byteArray = new ByteArray();
                byteArray.WriteBytes(request.downloadHandler.data);
                int head = byteArray.ReadInt();
                if (head == -777888)
                {
                    short  dataSrcRespone = byteArray.ReadShort(); //数据类型 1,全是基础数据类型 2,PB类型
                    short  resultCode     = byteArray.ReadShort(); //成功失败码
                    short  length         = byteArray.ReadShort();
                    byte[] result         = byteArray.ReadBytes();
                    if (resultCode == 404)
                    {
                        IoMessageBaseTypeImpl errorMessage = ProtostuffUtils.ProtobufDeserialize <IoMessageBaseTypeImpl>(result);
                        string errMsg = (string)errorMessage.getData();
                        IError error  = new ErrorImpl();

                        string[] str = errMsg.Split('$');
                        string[] msg = new string[] { "" };
                        if (str.Length <= 0)
                        {
                            error.err(202, msg);
                            throw new NotImplementedException("远程调用异常");
                        }
                        else if (str.Length > 1)
                        {
                            msg = new string[str.Length - 1];
                            for (int i = 0; i < str.Length; i++)
                            {
                                msg[i] = str[i + 1];
                            }
                        }
                        error.err(short.Parse(str[0]), msg);
                        throw new NotImplementedException("远程调用异常");
                    }
                    switch (dataSrcRespone)
                    {
                    case (short)DataSrcEnum.BaseType:
                        Debug.Log("马上返回");
                        return(ProtostuffUtils.ProtobufDeserialize <IoMessageBaseTypeImpl>(result));

                    case (short)DataSrcEnum.PBType:
                        return(ProtostuffUtils.ProtobufDeserialize <IoMessagePBTypeImpl>(result));
                    }
                }
            }
            return(null);
        }