示例#1
0
        internal bool DeSerialize <valueType>(ref SubArray <byte> data, ref valueType value, bool isSimpleSerialize)
            where valueType : struct
        {
            if ((CommandIndex & (uint)CommandFlags.JsonSerialize) == 0)
            {
                if (isSimpleSerialize)
                {
                    fixed(byte *dataFixed = data.GetFixedBuffer())
                    {
                        byte *start = dataFixed + data.Start, end = start + data.Length;

                        return(SimpleSerialize.TypeDeSerializer <valueType> .DeSerialize(start, ref value, end) == end);
                    }
                }
                if (ReceiveDeSerializer == null)
                {
                    ReceiveDeSerializer = AutoCSer.BinaryDeSerializer.YieldPool.Default.Pop() ?? new AutoCSer.BinaryDeSerializer();
                    ReceiveDeSerializer.SetTcpServer(binaryDeSerializeConfig, this);
                }
                return(ReceiveDeSerializer.DeSerializeTcpServer(ref data, ref value));
                //if (ReceiveDeSerializer.DeSerializeTcpServer(ref data, ref value)) return true;
                //if (data.Length > 1 << 20) System.IO.File.WriteAllBytes((++testIdentity).ToString() + "." + data.Length.ToString(), data.ToArray());
                //return false;
            }
            if (ReceiveJsonDeSerializer == null)
            {
                ReceiveJsonDeSerializer = AutoCSer.JsonDeSerializer.YieldPool.Default.Pop() ?? new AutoCSer.JsonDeSerializer();
                ReceiveJsonDeSerializer.SetTcpServer();
            }
            return(ReceiveJsonDeSerializer.DeSerializeTcpServer(ref data, ref value));
        }
示例#2
0
        /// <summary>
        /// 枚举类型解析
        /// </summary>
        /// <param name="value">目标数据</param>
        private unsafe void parseEnum <valueType>(ref valueType value)
        {
            BufferIndex *indexs = queryIndex + 1;

            if (indexs->Length == 0)
            {
                value = default(valueType);
            }
            else
            {
                current = bufferStart + indexs->StartIndex;
                *(current + indexs->Length) = *(current - 1) = (byte)'"';
                AutoCSer.JsonDeSerializer parser = Interlocked.Exchange(ref enumJsonParser, null);
                if (parser == null)
                {
                    parser = AutoCSer.JsonDeSerializer.YieldPool.Default.Pop() ?? new AutoCSer.JsonDeSerializer();
                    parser.SetEnum();
                }
                if (!parser.DeSerializeEnum(header.UnescapeUtf8(bufferStart, indexs->StartIndex - 1, indexs->Length + 2), ref value))
                {
                    state = HeaderQueryParseState.Unknown;
                }
                if ((parser = Interlocked.Exchange(ref enumJsonParser, parser)) != null)
                {
                    parser.Free();
                }
            }
        }
示例#3
0
 /// <summary>
 /// 清除缓存数据
 /// </summary>
 /// <param name="count">保留缓存数据数量</param>
 private static void clearCache(int count)
 {
     if (count == 0)
     {
         enumJsonParser = null;
     }
 }
示例#4
0
        private void parseJson(AutoCSer.JsonDeSerializer parser)
        {
            if (MemberMap == null)
            {
                MemberMap = new MemberMap <memberMapType>();
            }
            parser.MemberMap = MemberMap;
            if (Value == null)
            {
                valueType poolValue = Value = MemberMapValueLinkPool <valueType> .Pop();

                try
                {
                    AutoCSer.Json.TypeDeSerializer <valueType> .DeSerialize(parser, ref Value);
                }
                finally
                {
                    if (poolValue != null && poolValue != Value)
                    {
                        MemberMapValueLinkPool <valueType> .PushNotNull(poolValue);
                    }
                }
            }
            else
            {
                memberMapType parseValue = Value;
                AutoCSer.Json.TypeDeSerializer <memberMapType> .DeSerialize(parser, ref parseValue);
            }
        }
示例#5
0
 internal void ParseJson(AutoCSer.JsonDeSerializer parser)
 {
     if (MemberMap == null)
     {
         MemberMap = AutoCSer.Metadata.MemberMap <valueType> .NewEmpty();
     }
     parser.MemberMap = MemberMap;
     parser.TypeDeSerialize(ref Value);
 }
示例#6
0
 private void parseJson(AutoCSer.JsonDeSerializer parser)
 {
     if (MemberMap == null)
     {
         MemberMap = new MemberMap <valueType>();
     }
     parser.MemberMap = MemberMap;
     parser.TypeDeSerialize(ref Value);
 }
示例#7
0
        protected bool parseJson <parameterType>(ref parameterType parameter, string json) where parameterType : struct
        {
            AutoCSer.JsonDeSerializer parser = Interlocked.Exchange(ref JsonParser, null) ?? AutoCSer.JsonDeSerializer.YieldPool.Default.Pop() ?? new AutoCSer.JsonDeSerializer();
            bool isParse = parser.DeSerializeWebViewNotEmpty(ref parameter, json, jsonParserConfig);

            if ((parser = Interlocked.Exchange(ref JsonParser, parser)) != null)
            {
                parser.Free();
            }
            return(isParse);
        }
示例#8
0
        private unsafe void deSerialize(AutoCSer.JsonDeSerializer parser)
        {
            switch (parser.TypeDeSerialize <int>())
            {
            case 1: Value = null; return;

            case 2: Value = string.Empty; return;

            default: parser.MoveRead(-1); return;
            }
        }
示例#9
0
文件: Node.cs 项目: AutoCSer/AutoCSer
        /// <summary>
        /// 参数反序列化
        /// </summary>
        /// <typeparam name="parameterType"></typeparam>
        /// <param name="jsonDeSerializer"></param>
        /// <param name="parameter"></param>
        protected void deSerializeParameter <parameterType>(AutoCSer.JsonDeSerializer jsonDeSerializer, ref parameterType parameter)
        {
            if (jsonDeSerializer.DeSerializeState == Json.DeSerializeState.Success)
            {
                if (*jsonDeSerializer.Current++ == ',')
                {
                    AutoCSer.Json.TypeDeSerializer <parameterType> .DeSerialize(jsonDeSerializer, ref parameter);

                    return;
                }
                jsonDeSerializer.DeSerializeState = Json.DeSerializeState.Custom;
            }
        }
示例#10
0
 internal void FreeReceiveDeSerializer()
 {
     AutoCSer.BinaryDeSerializer deSerializer = Interlocked.Exchange(ref ReceiveDeSerializer, null);
     if (deSerializer != null)
     {
         deSerializer.Free();
     }
     AutoCSer.JsonDeSerializer jsonDeSerializer = Interlocked.Exchange(ref ReceiveJsonDeSerializer, null);
     if (jsonDeSerializer != null)
     {
         jsonDeSerializer.Free();
     }
 }
示例#11
0
 internal void FreeReceiveDeSerializer()
 {
     if (ReceiveDeSerializer != null)
     {
         ReceiveDeSerializer.Free();
         ReceiveDeSerializer = null;
     }
     if (ReceiveJsonDeSerializer != null)
     {
         ReceiveJsonDeSerializer.Free();
         ReceiveJsonDeSerializer = null;
     }
 }
示例#12
0
文件: Node.cs 项目: AutoCSer/AutoCSer
 /// <summary>
 /// 服务端反序列化
 /// </summary>
 /// <param name="jsonDeSerializer"></param>
 /// <param name="value"></param>
 internal static void DeSerialize(AutoCSer.JsonDeSerializer jsonDeSerializer, ref Node value)
 {
     if (*jsonDeSerializer.Current++ == '[')
     {
         int serverNodeId = 0;
         jsonDeSerializer.CallSerialize(ref serverNodeId);
         if (jsonDeSerializer.State == Json.DeSerializeState.Success)
         {
             (value = createNodes.Array[serverNodeId]()).deSerialize(jsonDeSerializer);
         }
         return;
     }
     jsonDeSerializer.DeSerializeState = Json.DeSerializeState.Custom;
 }
示例#13
0
        /// <summary>
        /// 数据反序列化
        /// </summary>
        /// <typeparam name="outputParameterType"></typeparam>
        /// <param name="commandInfo"></param>
        /// <param name="outputParameter"></param>
        /// <param name="clientBuffer"></param>
        private unsafe void deSerialize <outputParameterType>(TcpServer.CommandInfoBase commandInfo, ref outputParameterType outputParameter, ref ClientBuffer clientBuffer)
            where outputParameterType : struct
        {
            if ((commandInfo.CommandFlags & TcpServer.CommandFlags.JsonSerialize) == 0)
            {
                if (commandInfo.SimpleSerializeOutputParamter == 0)
                {
                    if (receiveDeSerializer == null)
                    {
                        receiveDeSerializer = AutoCSer.BinaryDeSerializer.YieldPool.Default.Pop() ?? new AutoCSer.BinaryDeSerializer();
                        receiveDeSerializer.SetTcpServer(AutoCSer.BinaryDeSerializer.DefaultConfig, null);
                    }
                    if (receiveDeSerializer.DeSerializeTcpServer(ref clientBuffer.Data, ref outputParameter))
                    {
                        clientBuffer.ReturnType = TcpServer.ReturnType.Success;
                        return;
                    }
                }
                else
                {
                    fixed(byte *dataFixed = clientBuffer.Data.GetFixedBuffer())
                    {
                        byte *start = dataFixed + clientBuffer.Data.Start, end = start + clientBuffer.Data.Length;

                        if (SimpleSerialize.TypeDeSerializer <outputParameterType> .DeSerialize(start, ref outputParameter, end) == end)
                        {
                            clientBuffer.ReturnType = TcpServer.ReturnType.Success;
                            return;
                        }
                    }
                }
            }
            else
            {
                if (receiveJsonParser == null)
                {
                    receiveJsonParser = AutoCSer.JsonDeSerializer.YieldPool.Default.Pop() ?? new AutoCSer.JsonDeSerializer();
                    receiveJsonParser.SetTcpServer();
                }
                if (receiveJsonParser.DeSerializeTcpServer(ref clientBuffer.Data, ref outputParameter))
                {
                    clientBuffer.ReturnType = TcpServer.ReturnType.Success;
                    return;
                }
            }
            clientBuffer.ReturnType = TcpServer.ReturnType.ClientDeSerializeError;
        }
示例#14
0
        internal bool DeSerializeJson <valueType>(ref SubArray <byte> data, ref valueType value)
            where valueType : struct
        {
            AutoCSer.JsonDeSerializer jsonDeSerializer = Interlocked.Exchange(ref ReceiveJsonDeSerializer, null);
            if (jsonDeSerializer == null)
            {
                jsonDeSerializer = AutoCSer.JsonDeSerializer.YieldPool.Default.Pop() ?? new AutoCSer.JsonDeSerializer();
                jsonDeSerializer.SetTcpServer();
            }
            bool isValue = jsonDeSerializer.DeSerializeTcpServer(ref data, ref value);

            if (Interlocked.CompareExchange(ref ReceiveJsonDeSerializer, jsonDeSerializer, null) != null)
            {
                jsonDeSerializer.Free();
            }
            return(isValue);
        }
示例#15
0
 private unsafe static void deSerialize(AutoCSer.JsonDeSerializer jsonDeSerializer, ref ReturnValue value)
 {
     if (*jsonDeSerializer.Current++ == '[')
     {
         if (*jsonDeSerializer.Current == ']')
         {
             ++jsonDeSerializer.Current;
             return;
         }
         int clientNodeId = 0;
         jsonDeSerializer.CallSerialize(ref clientNodeId);
         if (jsonDeSerializer.State == Json.DeSerializeState.Success)
         {
             value = createReturnValues.Array[clientNodeId]();
             value.deSerialize(jsonDeSerializer);
         }
         return;
     }
     jsonDeSerializer.DeSerializeState = Json.DeSerializeState.Custom;
 }
示例#16
0
        private static unsafe void deSerialize(AutoCSer.JsonDeSerializer parser, ref CustomClass value)
        {
            char *read = parser.CustomRead;

            if (parser.VerifyRead(1))
            {
                switch (*(char *)read)
                {
                case '1': value = new CustomClass {
                        Value = null
                }; return;

                case '2': value = new CustomClass {
                        Value = string.Empty
                }; return;

                default: parser.MoveRead(-1); return;
                }
            }
        }
示例#17
0
 private unsafe void deSerialize(AutoCSer.JsonDeSerializer jsonDeSerializer)
 {
     if (*jsonDeSerializer.Current++ == '[')
     {
         jsonDeSerializer.CallSerialize(ref ClientNodeId);
         if (jsonDeSerializer.State == Json.DeSerializeState.Success)
         {
             if (*jsonDeSerializer.Current++ == ',')
             {
                 Node.DeSerialize(jsonDeSerializer, ref Node);
                 if (jsonDeSerializer.State != Json.DeSerializeState.Success || *jsonDeSerializer.Current++ == ']')
                 {
                     return;
                 }
             }
         }
         else
         {
             return;
         }
     }
     jsonDeSerializer.DeSerializeState = Json.DeSerializeState.Custom;
 }
示例#18
0
文件: Node.cs 项目: AutoCSer/AutoCSer
 /// <summary>
 /// 客户端反序列化返回值
 /// </summary>
 /// <param name="jsonDeSerializer"></param>
 protected void deSerializeParent(AutoCSer.JsonDeSerializer jsonDeSerializer)
 {
     if (jsonDeSerializer.DeSerializeState == Json.DeSerializeState.Success)
     {
         char split = *jsonDeSerializer.Current++;
         if ((split & 1) == 0)
         {
             if (split == ',')
             {
                 DeSerialize(jsonDeSerializer, ref Parent);
                 if (jsonDeSerializer.State != Json.DeSerializeState.Success || *jsonDeSerializer.Current++ == ']')
                 {
                     return;
                 }
             }
         }
         else if (split == ']')
         {
             return;
         }
         jsonDeSerializer.DeSerializeState = Json.DeSerializeState.Custom;
     }
 }
示例#19
0
 internal void FreeSerializer()
 {
     OutputStream = null;
     if (ReceiveDeSerializer != null)
     {
         ReceiveDeSerializer.Free();
         ReceiveDeSerializer = null;
     }
     if (ReceiveJsonParser != null)
     {
         ReceiveJsonParser.Free();
         ReceiveJsonParser = null;
     }
     if (OutputSerializer != null)
     {
         OutputSerializer.Free();
         OutputSerializer = null;
     }
     if (OutputJsonSerializer != null)
     {
         OutputJsonSerializer.Free();
         OutputJsonSerializer = null;
     }
 }
示例#20
0
文件: Node.cs 项目: AutoCSer/AutoCSer
 private void deSerialize(AutoCSer.JsonDeSerializer jsonDeSerializer)
 {
     deSerializeParameter(jsonDeSerializer);
     deSerializeParent(jsonDeSerializer);
 }
示例#21
0
文件: Node.cs 项目: AutoCSer/AutoCSer
 /// <summary>
 /// 服务端反序列化
 /// </summary>
 /// <param name="jsonDeSerializer"></param>
 protected virtual void deSerializeParameter(AutoCSer.JsonDeSerializer jsonDeSerializer)
 {
 }
示例#22
0
 protected override void deSerializeParameter(AutoCSer.JsonDeSerializer parser)
 {
     #region LOOP IntputParameters
     base.deSerializeParameter(parser, ref @ParameterName);
     #endregion LOOP IntputParameters
 }
示例#23
0
 /// <summary>
 /// 客户端反序列化返回值
 /// </summary>
 /// <param name="jsonDeSerializer"></param>
 protected virtual void deSerialize(AutoCSer.JsonDeSerializer jsonDeSerializer)
 {
 }