示例#1
0
        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)'"';
                Json.Parser parser = Interlocked.Exchange(ref enumJsonParser, null);
                if (parser == null)
                {
                    parser = Json.Parser.YieldPool.Default.Pop() ?? new Json.Parser();
                    parser.SetEnum();
                }
                if (!parser.ParseEnum(header.UnescapeUtf8(bufferStart, indexs->StartIndex - 1, indexs->Length + 2), ref value))
                {
                    state = HeaderQueryParseState.Unknown;
                }
                if ((parser = Interlocked.Exchange(ref enumJsonParser, parser)) != null)
                {
                    parser.Free();
                }
            }
        }
示例#2
0
 /// <summary>
 /// 清除缓存数据
 /// </summary>
 /// <param name="count">保留缓存数据数量</param>
 private static void clearCache(int count)
 {
     if (count == 0)
     {
         enumJsonParser = null;
     }
 }
        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.Array)
                    {
                        byte *start = dataFixed + data.Start, end = start + data.Length;

                        return(SimpleSerialize.TypeDeSerializer <valueType> .DeSerialize(start, ref value, end) == end);
                    }
                }
                if (ReceiveDeSerializer == null)
                {
                    ReceiveDeSerializer = BinarySerialize.DeSerializer.YieldPool.Default.Pop() ?? new BinarySerialize.DeSerializer();
                    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 (ReceiveJsonParser == null)
            {
                ReceiveJsonParser = Json.Parser.YieldPool.Default.Pop() ?? new Json.Parser();
                ReceiveJsonParser.SetTcpServer();
            }
            return(ReceiveJsonParser.ParseTcpServer(ref data, ref value));
        }
示例#4
0
 public Defination GetDefination(Guid id)
 {
     var json = DefinationStorage.GetText(id.ToString() + ".json");
     if (json == null) return null;
     var data = new Json.Parser().Parse(json) as JObject;
     if (data == null) return null;
     return GetDefination(data);
 }
示例#5
0
 public Defination GetActivity(Guid runtimeId, Guid processId)
 {
     var dir = this.RuntimeStorage.GetDirectory(processId.ToString() + "/activities", false) as IStorageDirectory;
     if (dir == null) return null;
     var json = dir.GetText(runtimeId.ToString() + ".json");
     if (json == null) return null;
     var data = new Json.Parser().Parse(json) as JObject;
     return this.GetDefination(data) ;
 }
示例#6
0
        protected bool parseJson <parameterType>(ref parameterType parameter, string json) where parameterType : struct
        {
            Json.Parser parser  = Interlocked.Exchange(ref JsonParser, null) ?? Json.Parser.YieldPool.Default.Pop() ?? new Json.Parser();
            bool        isParse = parser.ParseWebViewNotEmpty(ref parameter, json, jsonParserConfig);

            if ((parser = Interlocked.Exchange(ref JsonParser, parser)) != null)
            {
                parser.Free();
            }
            return(isParse);
        }
 internal void FreeReceiveDeSerializer()
 {
     if (ReceiveDeSerializer != null)
     {
         ReceiveDeSerializer.Free();
         ReceiveDeSerializer = null;
     }
     if (ReceiveJsonParser != null)
     {
         ReceiveJsonParser.Free();
         ReceiveJsonParser = null;
     }
 }
示例#8
0
 internal void FreeReceiveDeSerializer()
 {
     BinarySerialize.DeSerializer deSerializer = Interlocked.Exchange(ref ReceiveDeSerializer, null);
     if (deSerializer != null)
     {
         deSerializer.Free();
     }
     Json.Parser parser = Interlocked.Exchange(ref ReceiveJsonParser, null);
     if (parser != null)
     {
         parser.Free();
     }
 }
示例#9
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 = BinarySerialize.DeSerializer.YieldPool.Default.Pop() ?? new BinarySerialize.DeSerializer();
                        receiveDeSerializer.SetTcpServer(AutoCSer.BinarySerialize.DeSerializer.DefaultConfig, null);
                    }
                    if (receiveDeSerializer.DeSerializeTcpServer(ref clientBuffer.Data, ref outputParameter))
                    {
                        clientBuffer.ReturnType = TcpServer.ReturnType.Success;
                        return;
                    }
                }
                else
                {
                    fixed(byte *dataFixed = clientBuffer.Data.Array)
                    {
                        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 = Json.Parser.YieldPool.Default.Pop() ?? new Json.Parser();
                    receiveJsonParser.SetTcpServer();
                }
                if (receiveJsonParser.ParseTcpServer(ref clientBuffer.Data, ref outputParameter))
                {
                    clientBuffer.ReturnType = TcpServer.ReturnType.Success;
                    return;
                }
            }
            clientBuffer.ReturnType = TcpServer.ReturnType.ClientDeSerializeError;
        }
示例#10
0
        internal bool ParseJson <valueType>(ref SubArray <byte> data, ref valueType value)
            where valueType : struct
        {
            Json.Parser parser = Interlocked.Exchange(ref ReceiveJsonParser, null);
            if (parser == null)
            {
                parser = Json.Parser.YieldPool.Default.Pop() ?? new Json.Parser();
                parser.SetTcpServer();
            }
            bool isValue = parser.ParseTcpServer(ref data, ref value);

            if (Interlocked.CompareExchange(ref ReceiveJsonParser, parser, null) != null)
            {
                parser.Free();
            }
            return(isValue);
        }
示例#11
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;
     }
 }
示例#12
0
        public void ParseToJToken()
        {
            var obj = new JObject();
            obj["Id"] = Guid.Empty;
            obj["Username"] = "******";

            var profile = new JObject();
            profile["Birthday"] = new DateTime(2015, 1, 1);
            profile["Age"] = 12;

            var favors = new JArray();
            favors.Push(12);
            favors.Push("Sweet Milk");
            obj["Profile"] = profile;
            profile["Favors"] = favors;

            obj["Actived"] = true;

            var jsonString = obj.ToJson();

            var convert = new Json.Parser();
            var json = convert.Parse(jsonString) as JObject;
            System.Text.RegularExpressions.Regex JsonDateRegex = new System.Text.RegularExpressions.Regex("^(\\d{4})\\-(10|11|12|0?\\d)\\-([012]\\d|30|31)T([01]\\d|2[0-3]):([0-5]?\\d):([0-5]?\\d)$", System.Text.RegularExpressions.RegexOptions.Compiled);
            var datestr = "2015-01-01T10:3:3";
            var match = JsonDateRegex.Match(datestr);
            Assert.Equal(Guid.Empty.ToString(), json["Id"].ToString());
            Assert.Equal("yiy", (string)json["Username"]);
            Assert.Equal(true, (bool)json["Actived"]);
            profile = json["Profile"] as JObject;
            Assert.Equal(new DateTime(2015, 1, 1), (DateTime)profile["Birthday"]);
            Assert.Equal(12, (int)profile["Age"]);
            favors = profile["Favors"] as JArray;
            Assert.Equal(12, (int)favors[0]);
            Assert.Equal("Sweet Milk", (string)favors[1]);

        }
 public ProccessDefination GetProccessDefination(string alias)
 {
     var jsonText = this.Storage.GetText(alias + ".proccess.json");
     if (jsonText == null) throw new ArgumentException("Proccess["+alias+"] is not existed or damaged.");
     var data = new Json.Parser().Parse(jsonText) as JObject;
     if (data == null) throw new ArgumentException("Proccess["+alias+"] is damaged.");
     return new ProccessDefination(data);
 }
 public IList<ProccessDefination> ListProccessDefnations(string packageAlias)
 {
     var packDir = this.Storage.GetDirectory(packageAlias);
     if (packDir == null) return null;
     var items = packDir.ListItems(false, StorageTypes.File);
     List<ProccessDefination> result = new List<ProccessDefination>();
     foreach (var item in items)
     {
         if (!item.Name.EndsWith(".proccess.json")) continue;
         var jsonText = packDir.GetText( item.Name);
         if (jsonText == null) continue;
         var data = new Json.Parser().Parse(jsonText) as JObject;
         if (data == null) continue;
         var def = new ProccessDefination(data);
         result.Add(def);
     }
     return result;
 }
 public ActivityDefination GetActivityDefination(string alias)
 {
     if (string.IsNullOrWhiteSpace(alias)) throw new ArgumentException("alias is required.");
     
     var shortAlias = GetShortAlias(alias);
     var jsonText = this.Storage.GetText(alias + ".activity.json");
     if (jsonText == null) throw new ArgumentException("Activity["+alias+"] is not existed or damaged.");
     var data = new Json.Parser().Parse(jsonText) as JObject;
     if (data == null) throw new ArgumentException("Activity["+alias+"] is damaged.");
     return new ActivityDefination(data);
 }
示例#16
0
        public void ParseToTokenWithFunction()
        {
            var jsonstring = @"{no:1,onstart : ";
            var func = @"function(evt,bk){
    var s = 'hello';
    var err={bk:s};
    for(var n in err){
        s += " + "\"\\\"\" + n + \"\\\"\" ':' + err[n];"
    + @"}
    var fn = function(s){alert(s);}
    fn(s);
}";
            jsonstring += func + "}";

            var convert = new Json.Parser();
            var obj = convert.Parse(jsonstring) as JObject;
            Assert.Equal(1, (int)obj["no"]);
            Assert.InstanceOf(obj["onstart"], typeof(JFunction));
            Assert.Equal(func, obj["onstart"].ToString().Trim());

        }
 public IList<PackageDefination> ListPackages()
 {
     var items = this.Storage.ListItems(false, StorageTypes.File);
     List<PackageDefination> result = new List<PackageDefination>();
     foreach (var item in items) {
         if (!item.Name.EndsWith(".package.json")) continue;
         try
         {
             var jsonText = this.Storage.GetText(item.Name);
             if (jsonText == null) throw new ArgumentException("Package[" + item.Name + "] is not existed or damaged.");
             var data = new Json.Parser().Parse(jsonText) as JObject;
             if (data == null) throw new ArgumentException("Package[" + item.Name + "] is damaged.");
             var pack= new PackageDefination(data);
             result.Add(pack);
         }
         catch (ArgumentException) { }
     }
     return result;
 }
 public TransactionDefination GetTransactionDefination(string alias)
 {
     if (string.IsNullOrWhiteSpace(alias)) throw new ArgumentException("alias is required.");
     
    
     var jsonText = this.Storage.GetText(alias + ".transaction.json");
     if (jsonText == null) throw new ArgumentException("Transaction["+alias+"] is not existed or damaged.");
     var data = new Json.Parser().Parse(jsonText) as JObject;
     if (data == null) throw new ArgumentException("Transaction["+alias+"] is damaged.");
     return new TransactionDefination(data);
 }
 public IList<ExecutionDefination> ListExecutionDefinations(string containerAlias)
 {
     var dir = this.Storage.GetDirectory(containerAlias);
     if (dir == null) return null;
     var items = dir.ListItems(true, StorageTypes.File);
     List<ExecutionDefination> result = new List<ExecutionDefination>();
     foreach (var item in items)
     {
         var file = item as IStorageFile;
         if (file == null) continue;
         string jsonText = null;
         JObject data = null;
         if (file.Name.EndsWith(".activity.json"))
         {
             jsonText = file.GetText();
             if (jsonText == null) continue;
             data = new Json.Parser().Parse(jsonText) as JObject;
             if (data == null) continue;
             var def = new ActivityDefination(data);
             result.Add(def);
         }
         else if (file.Name.EndsWith(".transaction.json")) {
             jsonText = file.GetText();
             if (jsonText == null) continue;
             data = new Json.Parser().Parse(jsonText) as JObject;
             if (data == null) continue;
             var def = new TransactionDefination(data);
             result.Add(def);
         }
         
     }
     return result;
 }
 public PackageDefination GetPackageDefination(string alias)
 {
     if (string.IsNullOrWhiteSpace(alias)) throw new ArgumentException("alias is required.");
     if (alias.Contains("/")) throw new ArgumentException("Invalid package alias. package alias cannot contain /");
    
     var jsonText = this.Storage.GetText(alias + ".package.json");
     if(jsonText==null) throw new ArgumentException("Package["+alias+"] is not existed or damaged.");
     var data = new Json.Parser().Parse(jsonText) as JObject;
     if(data==null) throw new ArgumentException("Package["+alias+"] is damaged.");
     return new PackageDefination(data);
 }