Exemple #1
0
 internal IotivityValueDictionary(OCRepPayload ocpayload) : this()
 {
     foreach (var item in FromOCRepPayload(ocpayload))
     {
         Add(item.Key, item.Value);
     }
 }
Exemple #2
0
        internal static IEnumerable <KeyValuePair <string, object> > FromOCRepPayload(OCRepPayload ocpayload)
        {
            var values = ocpayload.values;

            while (values != IntPtr.Zero)
            {
                var payloadValue = Marshal.PtrToStructure <OCRepPayloadValue>(values);
                var value        = payloadValue.value;
                switch (payloadValue.type)
                {
                case OCRepPayloadPropType.OCREP_PROP_NULL:
                    yield return(new KeyValuePair <string, object>(payloadValue.name, null)); break;

                case OCRepPayloadPropType.OCREP_PROP_STRING:
                {
                    var strvalue = Marshal.PtrToStringAnsi(value.ocByteStr);
                    yield return(new KeyValuePair <string, object>(payloadValue.name, strvalue)); break;
                }

                case OCRepPayloadPropType.OCREP_PROP_BOOL:
                {
                    bool bvalue = value.b;
                    yield return(new KeyValuePair <string, object>(payloadValue.name, bvalue));

                    break;
                }

                case OCRepPayloadPropType.OCREP_PROP_DOUBLE:
                {
                    double dvalue = value.d;
                    yield return(new KeyValuePair <string, object>(payloadValue.name, dvalue));

                    break;
                }

                case OCRepPayloadPropType.OCREP_PROP_INT:
                {
                    long lvalue = value.i;
                    yield return(new KeyValuePair <string, object>(payloadValue.name, lvalue));

                    break;
                }

                case OCRepPayloadPropType.OCREP_PROP_ARRAY:
                {
                    var arr  = value.arr;
                    int size = (int)arr.dimensions0;
                    //var v = Marshal.PtrToStructure<OCRepPayloadValueArrayUnion>(arr.value);
                    switch (arr.type)
                    {
                    case OCRepPayloadPropType.OCREP_PROP_DOUBLE:
                        double[] avalue = new double[size];
                        Marshal.Copy(arr.value, avalue, 0, avalue.Length);
                        yield return(new KeyValuePair <string, object>(payloadValue.name, avalue));

                        break;

                    case OCRepPayloadPropType.OCREP_PROP_INT:
                        var alvalue = new long[size];
                        Marshal.Copy(arr.value, alvalue, 0, alvalue.Length);
                        yield return(new KeyValuePair <string, object>(payloadValue.name, alvalue));

                        break;

                    default:
                        throw new NotImplementedException("Cannot convert " + arr.type.ToString() + " array");
                    }
                    //var a = Marshal.PtrToStructure<double[]>(arr);

                    break;
                }

                case OCRepPayloadPropType.OCREP_PROP_BYTE_STRING:
                case OCRepPayloadPropType.OCREP_PROP_OBJECT:
                default:
                    throw new NotImplementedException("Cannot convert " + payloadValue.type.ToString());
                }
                values = payloadValue.next;
            }
        }