Example #1
0
        public byte[] ToByteArray(DynamicContractDescription dynamicMessageDescription)
        {
            DynamicMessageDescription = dynamicMessageDescription;

            Protocol.Buffer.BitArray buffer = new Protocol.Buffer.BitArray();
            PushContractData(Data, DynamicMessageDescription, buffer);
            return(buffer.ToByteArray());
        }
Example #2
0
 public bool TryParseDynamicPropertyValue(byte[] array, IDynamicContractValue msg, out IDynamicMemberValue value)
 {
     Protocol.Buffer.BitArray buffer = new Protocol.Buffer.BitArray(array);
     return(TryParseDynamicPropertyValue(buffer, msg, out value));
 }
Example #3
0
        public void PushContractData(Dictionary <string, IDynamicValue> data,
                                     DynamicContractDescription contractDescription,
                                     Protocol.Buffer.BitArray buffer)
        {
            foreach (var memberDescription in contractDescription.Members)
            {
                if (memberDescription.Value.IsConditional)
                {
                    if (!memberDescription.Value.Condition.Evaluate(data))
                    {
                        continue;
                    }
                }
                if (memberDescription.Value.IsContract)
                {
                    if (memberDescription.Value.IsArray)
                    {
                        var value = data[memberDescription.Value.Name] as IDynamicMemberValue;

                        var arrayValue = value.Value as System.Collections.IEnumerable;
                        int i          = 0;
                        foreach (var item in arrayValue)
                        {
                            i++;
                            //array of contract
                            PushContractData(((DynamicContractValue)item).Data, memberDescription.Value.ContractDescription, buffer);
                        }
                    }
                    else
                    {
                        //contract
                        PushContractData(((DynamicContractValue)data[memberDescription.Value.Name]).Data, memberDescription.Value.ContractDescription, buffer);
                    }
                }
                else
                {
                    var value = data[memberDescription.Value.Name] as IDynamicMemberValue;

                    value.Description = memberDescription.Value;
                    var val = value.ToByteArray(data);
                    if (memberDescription.Value.IsArray)
                    {
                        int length      = 0;
                        var arrayLength = value.Description.ArrayLength;
                        if (!Int32.TryParse(arrayLength, out length))
                        {
                            //is reference value
                            length = Convert.ToInt32(data[arrayLength].Value);
                        }

                        //array of simple type
                        buffer.Push(val, memberDescription.Value.LengthInBits * length);
                    }
                    else
                    {
                        //simple type
                        buffer.Push(val, memberDescription.Value.LengthInBits);
                    }
                }
            }
        }
 public bool TryParseContract(byte[] rawData, out IDynamicContractValue msg)
 {
     Protocol.Buffer.BitArray buffer = new Protocol.Buffer.BitArray(rawData);
     return(TryParseContract(buffer, out msg));
 }