private byte[] SerialiseObject(ObjectDefinition objectDefinition, Model.Object item) { byte[] result = null; TlvWriter arrayWriter = null; MemoryStream arraystream = null; using (MemoryStream steam = new MemoryStream()) { TlvWriter writer = new TlvWriter(steam); foreach (Property property in item.Properties) { PropertyDefinition propertyDefinition = objectDefinition.GetProperty(property.PropertyID); if (propertyDefinition != null) { if (propertyDefinition.IsCollection) { if (property.Values != null) { ushort identifier; if (ushort.TryParse(propertyDefinition.PropertyID, out identifier)) { if (arrayWriter == null) { arraystream = new MemoryStream(); arrayWriter = new TlvWriter(arraystream); } arraystream.SetLength(0); foreach (PropertyValue propertyValue in property.Values) { WriteValue(arrayWriter, TTlvTypeIdentifier.ResourceInstance, propertyDefinition.DataType, propertyValue.PropertyValueID, propertyValue.Value); } byte[] arrayItems = arraystream.ToArray(); writer.Write(TTlvTypeIdentifier.MultipleResources, identifier, arrayItems); } } } else if (property.Value != null) { WriteValue(writer, TTlvTypeIdentifier.ResourceWithValue, propertyDefinition.DataType, propertyDefinition.PropertyID, property.Value.Value); } } } result = steam.ToArray(); } return(result); }
public override void Serialise(TlvWriter writer) { ushort identifier; if (ushort.TryParse(Name, out identifier)) { using (MemoryStream steam = new MemoryStream()) { TlvWriter childWriter = new TlvWriter(steam); foreach (DateTimeResource item in this.Children) { item.Serialise(childWriter, true); } writer.Write(TTlvTypeIdentifier.MultipleResources, identifier, steam.ToArray()); } } }
private void WriteValue(TlvWriter writer, TTlvTypeIdentifier typeIdentifier, TPropertyDataType dataType, string instanceID, string value) { ushort identifier; if (ushort.TryParse(instanceID, out identifier)) { switch (dataType) { case TPropertyDataType.NotSet: break; case TPropertyDataType.String: writer.Write(typeIdentifier, identifier, value); break; case TPropertyDataType.Boolean: bool boolValue; if (bool.TryParse(value, out boolValue)) writer.Write(typeIdentifier, identifier, boolValue); break; case TPropertyDataType.Integer: long longValue; if (long.TryParse(value, out longValue)) writer.Write(typeIdentifier, identifier, longValue); break; case TPropertyDataType.Float: double doubleValue; if (double.TryParse(value, out doubleValue)) writer.Write(typeIdentifier, identifier, doubleValue); break; case TPropertyDataType.DateTime: try { DateTime dateTimeValue = System.Xml.XmlConvert.ToDateTime(value, System.Xml.XmlDateTimeSerializationMode.Utc); writer.Write(typeIdentifier, identifier, dateTimeValue); } catch { } break; case TPropertyDataType.Opaque: byte[] buffer = Convert.FromBase64String(value); writer.Write(typeIdentifier, identifier, buffer); break; case TPropertyDataType.Object: break; default: break; } } }
private byte[] SerialiseObject(ObjectDefinition objectDefinition, Model.Object item) { byte[] result = null; TlvWriter arrayWriter = null; MemoryStream arraystream = null; using (MemoryStream steam = new MemoryStream()) { TlvWriter writer = new TlvWriter(steam); foreach (Property property in item.Properties) { PropertyDefinition propertyDefinition = objectDefinition.GetProperty(property.PropertyID); if (propertyDefinition != null) { if (propertyDefinition.IsCollection) { if (property.Values != null) { ushort identifier; if (ushort.TryParse(propertyDefinition.PropertyID, out identifier)) { if (arrayWriter == null) { arraystream = new MemoryStream(); arrayWriter = new TlvWriter(arraystream); } arraystream.SetLength(0); foreach (PropertyValue propertyValue in property.Values) { WriteValue(arrayWriter, TTlvTypeIdentifier.ResourceInstance, propertyDefinition.DataType, propertyValue.PropertyValueID, propertyValue.Value); } byte[] arrayItems = arraystream.ToArray(); writer.Write(TTlvTypeIdentifier.MultipleResources, identifier, arrayItems); } } } else if (property.Value != null) { WriteValue(writer, TTlvTypeIdentifier.ResourceWithValue, propertyDefinition.DataType, propertyDefinition.PropertyID, property.Value.Value); } } } result = steam.ToArray(); } return result; }
public void Serialise(TlvWriter writer, bool resourceInstance) { ushort identifier; if (ushort.TryParse(Name, out identifier)) { TTlvTypeIdentifier typeIdentifier = TTlvTypeIdentifier.ResourceWithValue; if (resourceInstance) typeIdentifier = TTlvTypeIdentifier.ResourceInstance; writer.Write(typeIdentifier, identifier, Value); } }
/* public bool NotificationStoringWhenOffline { get; set; } public TBindingMode Binding { get; set; } */ public void Serialise(TlvWriter writer) { writer.Write(TTlvTypeIdentifier.ResourceWithValue, (ushort)ResourceID.ShortServerID, ShortServerID); if (Lifetime > 0) { writer.Write(TTlvTypeIdentifier.ResourceWithValue, (ushort)ResourceID.Lifetime, Lifetime); } if (DefaultMinimumPeriod.HasValue) { writer.Write(TTlvTypeIdentifier.ResourceWithValue, (ushort)ResourceID.DefaultMinimumPeriod, DefaultMinimumPeriod.Value); } if (DefaultMaximumPeriod.HasValue) { writer.Write(TTlvTypeIdentifier.ResourceWithValue, (ushort)ResourceID.DefaultMaximumPeriod, DefaultMaximumPeriod.Value); } if (DisableTimeout.HasValue) { writer.Write(TTlvTypeIdentifier.ResourceWithValue, (ushort)ResourceID.DisableTimeout, DisableTimeout.Value); } writer.Write(TTlvTypeIdentifier.ResourceWithValue, (ushort)ResourceID.NotificationStoringWhenOffline, NotificationStoringWhenOffline); string binding = null; switch (Binding) { case TBindingMode.NotSet: break; case TBindingMode.UDP: binding = "U"; break; case TBindingMode.QueuedUDP: binding = "UQ"; break; case TBindingMode.SMS: binding = "S"; break; case TBindingMode.QueuedSMS: binding = "SQ"; break; case TBindingMode.UDPSMS: binding = "US"; break; case TBindingMode.QueuedUDPSMS: binding = "UQS"; break; default: break; } writer.Write(TTlvTypeIdentifier.ResourceWithValue, (ushort)ResourceID.Binding, binding); }
protected override void DoGet(CoapExchange exchange) { Response response = null; if (exchange.Request.Observe.HasValue && exchange.Request.Observe.Value == 0) { response = Response.CreateResponse(exchange.Request, StatusCode.Content); response.MaxAge = 86400; } else response = Response.CreateResponse(exchange.Request, StatusCode.Content); using (MemoryStream steam = new MemoryStream()) { using (MemoryStream itemSteam = new MemoryStream()) { TlvWriter writer = new TlvWriter(steam); TlvWriter itemWriter = new TlvWriter(itemSteam); foreach (LWM2MResource item in Children) { if (ModifiedResource == null || ModifiedResource == item) { itemSteam.SetLength(0); ushort identifier = ushort.Parse(item.Name); item.Serialise(itemWriter); writer.Write(TTlvTypeIdentifier.ObjectInstance, identifier, itemSteam.ToArray()); } } ModifiedResource = null; response.Payload = steam.ToArray(); } } response.ContentType = TlvConstant.CONTENT_TYPE_TLV; exchange.Respond(response); }
public void Serialise(TlvWriter writer) { if (!string.IsNullOrEmpty(ServerURI)) { writer.Write(TTlvTypeIdentifier.ResourceWithValue, (ushort)ResourceID.ServerURI, ServerURI); } writer.Write(TTlvTypeIdentifier.ResourceWithValue, (ushort)ResourceID.BootstrapServer, BootstrapServer); writer.Write(TTlvTypeIdentifier.ResourceWithValue, (ushort)ResourceID.SecurityMode, (int)SecurityMode); if (ClientPublicKey != null) { writer.Write(TTlvTypeIdentifier.ResourceWithValue, (ushort)ResourceID.ClientPublicKey, ClientPublicKey); } if (ServerPublicKey != null) { writer.Write(TTlvTypeIdentifier.ResourceWithValue, (ushort)ResourceID.ServerPublicKey, ServerPublicKey); } if (SecretKey != null) { writer.Write(TTlvTypeIdentifier.ResourceWithValue, (ushort)ResourceID.SecretKey, SecretKey); } if (SMSSecurityMode != TSMSSecurityMode.NotSet) writer.Write(TTlvTypeIdentifier.ResourceWithValue, (ushort)ResourceID.SMSSecurityMode, (int)SMSSecurityMode); if (SMSBindingKeyParameters != null) { writer.Write(TTlvTypeIdentifier.ResourceWithValue, (ushort)ResourceID.SMSBindingKeyParameters, SMSBindingKeyParameters); } if (SMSBindingSecretKeys != null) { writer.Write(TTlvTypeIdentifier.ResourceWithValue, (ushort)ResourceID.SMSBindingSecretKeys, SMSBindingSecretKeys); } if (ServerSMSNumber.HasValue) { writer.Write(TTlvTypeIdentifier.ResourceWithValue, (ushort)ResourceID.ServerSMSNumber, ServerSMSNumber.Value); } if (ShortServerID > 0) { writer.Write(TTlvTypeIdentifier.ResourceWithValue, (ushort)ResourceID.ShortServerID, ShortServerID); } if (ClientHoldOffTime.HasValue) { writer.Write(TTlvTypeIdentifier.ResourceWithValue, (ushort)ResourceID.ClientHoldOffTime, ClientHoldOffTime.Value); } }
private void WriteValue(TlvWriter writer, TTlvTypeIdentifier typeIdentifier, TPropertyDataType dataType, string instanceID, string value) { ushort identifier; if (ushort.TryParse(instanceID, out identifier)) { switch (dataType) { case TPropertyDataType.NotSet: break; case TPropertyDataType.String: writer.Write(typeIdentifier, identifier, value); break; case TPropertyDataType.Boolean: bool boolValue; if (bool.TryParse(value, out boolValue)) { writer.Write(typeIdentifier, identifier, boolValue); } break; case TPropertyDataType.Integer: long longValue; if (long.TryParse(value, out longValue)) { writer.Write(typeIdentifier, identifier, longValue); } break; case TPropertyDataType.Float: double doubleValue; if (double.TryParse(value, out doubleValue)) { writer.Write(typeIdentifier, identifier, doubleValue); } break; case TPropertyDataType.DateTime: try { DateTime dateTimeValue = System.Xml.XmlConvert.ToDateTime(value, System.Xml.XmlDateTimeSerializationMode.Utc); writer.Write(typeIdentifier, identifier, dateTimeValue); } catch { } break; case TPropertyDataType.Opaque: byte[] buffer = Convert.FromBase64String(value); writer.Write(typeIdentifier, identifier, buffer); break; case TPropertyDataType.Object: break; default: break; } } }