public List <ObjectDefinition> GetObjectDefinitions(int organisationID) { List <ObjectDefinition> result = new List <ObjectDefinition>(); ObjectDefinitionLookups lookups = GetLookups(); Dictionary <Guid, object> alreadyAdded = new Dictionary <Guid, object>(); foreach (ObjectDefinition item in lookups.DefaultObjectDefinitions) { ObjectDefinition objectDefinition = lookups.GetObjectDefinition(organisationID, item.ObjectID); result.Add(objectDefinition); alreadyAdded.Add(objectDefinition.ObjectDefinitionID, null); } List <ObjectDefinition> objectDefinitions = lookups.GetObjectDefinitions(organisationID); if (objectDefinitions != null) { foreach (ObjectDefinition item in objectDefinitions) { if (!alreadyAdded.ContainsKey(item.ObjectDefinitionID)) { result.Add(item); } } } result.Sort(SortObjectDefinition); return(result); }
public void SaveObjectDefinitions(List <ObjectDefinition> objectDefinitions, TObjectState state) { if (state == TObjectState.Add) { ObjectDefinitionLookups lookups = GetLookups(); foreach (ObjectDefinition item in objectDefinitions) { int organisationID = 0; if (item.OrganisationID.HasValue) { organisationID = item.OrganisationID.Value; } ObjectDefinition existingObjectDefinition = lookups.GetObjectDefinition(organisationID, item.ObjectID); if (existingObjectDefinition != null) { int existingOrganisationID = 0; if (existingObjectDefinition.OrganisationID.HasValue) { existingOrganisationID = existingObjectDefinition.OrganisationID.Value; } if (organisationID == existingOrganisationID) { throw new ConflictException(); } } } } DataAccessFactory.ObjectDefinitions.SaveObjectDefinitions(objectDefinitions, state); }
public ObjectDefinition GetObjectDefinition(int organisationID, Guid objectDefinitionID) { ObjectDefinition result = null; ObjectDefinitionLookups lookups = GetLookups(); ObjectDefinition objectDefinition = lookups.GetObjectDefinition(objectDefinitionID); if (objectDefinition != null && (!objectDefinition.OrganisationID.HasValue || (objectDefinition.OrganisationID.Value == organisationID))) { result = objectDefinition; } return(result); }
public ObjectDefinitionLookups GetLookups() { ObjectDefinitionLookups result = _CachedLookups; if (result == null) { result = new ObjectDefinitionLookups(); IMongoDatabase database = GetDatabase(DATABASE_NAME, false); LoadObjectDefinition(database, result); _CachedLookups = result; } return(result); }
public bool ExecuteResource(Guid clientID, Guid objectDefinitionID, string instanceID, Guid propertyDefinitionID) { bool result = false; try { LWM2MClient client = BusinessLogicFactory.Clients.GetClient(clientID); if (client != null) { ObjectDefinitionLookups lookups = BusinessLogicFactory.Clients.GetLookups(); ObjectDefinition objectDefinition = lookups.GetObjectDefinition(objectDefinitionID); if (objectDefinition != null) { int objectID; if (int.TryParse(objectDefinition.ObjectID, out objectID)) { Model.ObjectType objectType = client.SupportedTypes.GetObjectType(objectID); if (objectType != null) { PropertyDefinition propertyDefinition = objectDefinition.GetProperty(propertyDefinitionID); if (propertyDefinition != null) { Request request = client.NewPostRequest(objectType, instanceID, propertyDefinition.PropertyID, -1, null); Response response = client.SendRequest(request).WaitForResponse(LWM2MClient.REQUEST_TIMEOUT); if (response == null) { throw new TimeoutException(); } else { if (response.StatusCode == StatusCode.Changed) { result = true; } } } } } } } } catch (Exception ex) { ApplicationEventLog.WriteEntry("Flow", ex.ToString(), System.Diagnostics.EventLogEntryType.Error); } return(result); }
public Property GetObjectProperty(Guid clientID, Guid objectDefinitionID, string instanceID, Guid propertyDefinitionID) { Property result = null; try { LWM2MClient client = BusinessLogicFactory.Clients.GetClient(clientID); if (client != null) { ObjectDefinitionLookups lookups = BusinessLogicFactory.Clients.GetLookups(); ObjectDefinition objectDefinition = lookups.GetObjectDefinition(objectDefinitionID); if (objectDefinition != null) { int objectID; if (int.TryParse(objectDefinition.ObjectID, out objectID)) { Model.ObjectType objectType = client.SupportedTypes.GetObjectType(objectID); if (objectType != null) { PropertyDefinition propertyDefinition = objectDefinition.GetProperty(propertyDefinitionID); if (propertyDefinition != null) { Request request = client.NewGetRequest(objectType, instanceID, propertyDefinition.PropertyID); Response response = client.SendRequest(request).WaitForResponse(LWM2MClient.REQUEST_TIMEOUT); if (response != null && response.StatusCode == StatusCode.Content) { BusinessLogicFactory.Clients.UpdateClientActivity(client); result = ParseProperty(objectDefinition, propertyDefinition, request.Accept, response); } } } } } } } catch (Exception ex) { ApplicationEventLog.WriteEntry("Flow", ex.ToString(), System.Diagnostics.EventLogEntryType.Error); } return(result); }
public void CancelObserveObjectProperty(Guid clientID, Guid objectDefinitionID, string instanceID, Guid propertyDefinitionID, bool useReset) { try { LWM2MClient client = BusinessLogicFactory.Clients.GetClient(clientID); if (client != null) { ObjectDefinitionLookups lookups = BusinessLogicFactory.Clients.GetLookups(); ObjectDefinition objectDefinition = lookups.GetObjectDefinition(objectDefinitionID); if (objectDefinition != null) { int objectID; if (int.TryParse(objectDefinition.ObjectID, out objectID)) { Model.ObjectType objectType = client.SupportedTypes.GetObjectType(objectID); if (objectType != null) { if (propertyDefinitionID != Guid.Empty) { PropertyDefinition propertyDefinition = objectDefinition.GetProperty(propertyDefinitionID); if (propertyDefinition != null) { client.CancelObserve(objectType, instanceID, propertyDefinition.PropertyID, useReset); } } else { client.CancelObserve(objectType, instanceID, null, useReset); } } } } } } catch (Exception ex) { ApplicationEventLog.WriteEntry("Flow", ex.ToString(), System.Diagnostics.EventLogEntryType.Error); } }
private void LoadObjectDefinition(IMongoDatabase database, ObjectDefinitionLookups lookups) { IMongoCollection <BsonDocument> collection = database.GetCollection <BsonDocument>("ObjectDefinition"); IAsyncCursor <BsonDocument> mongoCursor = collection.FindSync(new BsonDocument()); while (mongoCursor.MoveNext()) { foreach (BsonDocument item in mongoCursor.Current) { ObjectDefinition objectDefinition = new ObjectDefinition(); objectDefinition.ObjectDefinitionID = BsonHelper.GetGuid(item, "_id"); objectDefinition.ObjectID = BsonHelper.GetString(item, "ObjectID"); objectDefinition.OrganisationID = BsonHelper.GetInteger(item, "OrganisationID"); if (objectDefinition.OrganisationID.HasValue && (objectDefinition.OrganisationID.Value == 0)) { objectDefinition.OrganisationID = null; } objectDefinition.Name = BsonHelper.GetString(item, "Name"); objectDefinition.MIMEType = BsonHelper.GetString(item, "MIMEType"); objectDefinition.Description = BsonHelper.GetString(item, "Description"); objectDefinition.SerialisationName = BsonHelper.GetString(item, "SerialisationName"); objectDefinition.Singleton = BsonHelper.GetBoolean(item, "Singleton"); if (item.Contains("Properties")) { BsonArray array = item["Properties"].AsBsonArray; foreach (BsonValue arrayItem in array) { BsonDocument propertyItem = arrayItem.AsBsonDocument; if (propertyItem != null) { if (objectDefinition.Properties == null) { objectDefinition.Properties = new List <PropertyDefinition>(); } PropertyDefinition property = new PropertyDefinition(); property.PropertyDefinitionID = BsonHelper.GetGuid(propertyItem, "_id"); property.PropertyID = BsonHelper.GetString(propertyItem, "PropertyID"); property.Name = BsonHelper.GetString(propertyItem, "Name"); property.Description = BsonHelper.GetString(propertyItem, "Description"); property.DataType = (TPropertyDataType)propertyItem["DataType"].AsInt32; if (propertyItem.Contains("DataTypeLength")) { property.DataTypeLength = propertyItem["DataTypeLength"].AsInt32; } property.MIMEType = BsonHelper.GetString(propertyItem, "MIMEType"); property.MinValue = BsonHelper.GetString(propertyItem, "MinValue"); property.MaxValue = BsonHelper.GetString(propertyItem, "MaxValue"); property.Units = BsonHelper.GetString(propertyItem, "Units"); property.IsCollection = BsonHelper.GetBoolean(propertyItem, "IsCollection"); property.IsMandatory = BsonHelper.GetBoolean(propertyItem, "IsMandatory"); property.Access = (TAccessRight)propertyItem["Access"].AsInt32; if (propertyItem.Contains("SortOrder")) { property.SortOrder = propertyItem["SortOrder"].AsInt32; } property.SerialisationName = BsonHelper.GetString(propertyItem, "SerialisationName"); property.CollectionItemSerialisationName = BsonHelper.GetString(propertyItem, "CollectionItemSerialisationName"); objectDefinition.Properties.Add(property); } } } lookups.AddObjectDefinition(objectDefinition); } } }
private void OnNotification(object sender, NotificationEventArgs e) { _CachedLookups = null; }
public bool SetNotificationParameters(Guid clientID, Guid objectDefinitionID, string instanceID, Guid propertyDefinitionID, NotificationParameters notificationParameters) { bool result = false; try { LWM2MClient client = BusinessLogicFactory.Clients.GetClient(clientID); if (client != null) { ObjectDefinitionLookups lookups = BusinessLogicFactory.Clients.GetLookups(); ObjectDefinition objectDefinition = lookups.GetObjectDefinition(objectDefinitionID); if (objectDefinition != null) { int objectID; if (int.TryParse(objectDefinition.ObjectID, out objectID)) { Model.ObjectType objectType = client.SupportedTypes.GetObjectType(objectID); if (objectType != null) { PropertyDefinition propertyDefinition = objectDefinition.GetProperty(propertyDefinitionID); if (propertyDefinition != null) { Request request = client.NewPutRequest(objectType, instanceID, propertyDefinition.PropertyID, -1, null); if (notificationParameters.MinimumPeriod.HasValue) { request.AddUriQuery(string.Concat("pmin=", notificationParameters.MinimumPeriod.Value.ToString())); } if (notificationParameters.MaximumPeriod.HasValue) { request.AddUriQuery(string.Concat("pmax=", notificationParameters.MaximumPeriod.Value.ToString())); } if (notificationParameters.GreaterThan.HasValue) { request.AddUriQuery(string.Concat("gt=", notificationParameters.GreaterThan.Value.ToString("0.0"))); } if (notificationParameters.LessThan.HasValue) { request.AddUriQuery(string.Concat("lt=", notificationParameters.LessThan.Value.ToString("0.0"))); } if (notificationParameters.Step.HasValue) { request.AddUriQuery(string.Concat("stp=", notificationParameters.Step.Value.ToString("0.0"))); } Response response = client.SendRequest(request).WaitForResponse(LWM2MClient.REQUEST_TIMEOUT); if (response == null) { throw new TimeoutException(); } else { if (response.StatusCode == StatusCode.Changed) { result = true; } } } } } } } } catch (Exception ex) { ApplicationEventLog.WriteEntry("Flow", ex.ToString(), System.Diagnostics.EventLogEntryType.Error); } return(result); }
public void SaveObjectProperty(Guid clientID, Guid objectDefinitionID, string instanceID, Property property, TObjectState state) { LWM2MClient client = BusinessLogicFactory.Clients.GetClient(clientID); if (client == null) { ApplicationEventLog.Write(LogLevel.Warning, string.Concat("SaveObject - Client not found ", clientID.ToString())); throw new NoLongerAvailableException("Device not connected"); } else { ObjectDefinitionLookups lookups = BusinessLogicFactory.Clients.GetLookups(); ObjectDefinition objectDefinition = lookups.GetObjectDefinition(objectDefinitionID); if (objectDefinition != null) { int objectID; if (int.TryParse(objectDefinition.ObjectID, out objectID)) { Model.ObjectType objectType = client.SupportedTypes.GetObjectType(objectID); if (objectType != null) { PropertyDefinition propertyDefinition = objectDefinition.GetProperty(property.PropertyDefinitionID); if (propertyDefinition != null) { byte[] payload = null; int contentType = TlvConstant.CONTENT_TYPE_TLV; if (state != TObjectState.Delete) { if ((property.Value != null) || (property.Values != null)) { if ((property.Value != null) && (LWM2MClient.DataFormat == MediaType.TextPlain)) { contentType = LWM2MClient.DataFormat; //contentType = TlvConstant.CONTENT_TYPE_PLAIN; string text = SerialiseProperty(propertyDefinition, property); if (text != null) { payload = Encoding.UTF8.GetBytes(text); } } else { Model.Object lwm2mObject = new Model.Object(); lwm2mObject.Properties.Add(property); payload = SerialiseObject(objectDefinition, lwm2mObject); } } } Request request = null; switch (state) { case TObjectState.NotChanged: break; case TObjectState.Add: request = client.NewPostRequest(objectType, instanceID, propertyDefinition.PropertyID, contentType, payload); break; case TObjectState.Update: request = client.NewPutRequest(objectType, instanceID, propertyDefinition.PropertyID, contentType, payload); break; case TObjectState.Delete: request = client.NewDeleteRequest(objectType, instanceID, propertyDefinition.PropertyID); break; default: break; } Response response = client.SendRequest(request).WaitForResponse(LWM2MClient.REQUEST_TIMEOUT); if (response == null) { throw new TimeoutException(); } else { BusinessLogicFactory.Clients.UpdateClientActivity(client); if (response.StatusCode != StatusCode.Changed) { throw new BadRequestException(); } } } } } } } }
public string SaveObject(Guid clientID, Model.Object item, TObjectState state) { string result = null; LWM2MClient client = BusinessLogicFactory.Clients.GetClient(clientID); if (client == null) { ApplicationEventLog.Write(LogLevel.Warning, string.Concat("SaveObject - Client not found ", clientID.ToString())); throw new NoLongerAvailableException("Device not connected"); } else { ObjectDefinitionLookups lookups = BusinessLogicFactory.Clients.GetLookups(); ObjectDefinition objectDefinition = lookups.GetObjectDefinition(item.ObjectDefinitionID); if (objectDefinition == null) { ApplicationEventLog.Write(LogLevel.Warning, string.Concat("SaveObject - Metadata not found ", item.ObjectDefinitionID.ToString(), " client ", client.Address.ToString())); } else { int objectID; if (int.TryParse(objectDefinition.ObjectID, out objectID)) { Model.ObjectType objectType = client.SupportedTypes.GetObjectType(objectID); if (objectType != null) { Request request = null; switch (state) { case TObjectState.NotChanged: break; case TObjectState.Add: ushort instanceID; if (ushort.TryParse(item.InstanceID, out instanceID)) { request = client.NewPostRequest(objectType, null, null, TlvConstant.CONTENT_TYPE_TLV, SerialiseObject(objectDefinition, item, instanceID)); } else { request = client.NewPostRequest(objectType, null, null, TlvConstant.CONTENT_TYPE_TLV, SerialiseObject(objectDefinition, item)); } break; case TObjectState.Update: request = client.NewPostRequest(objectType, item.InstanceID, null, TlvConstant.CONTENT_TYPE_TLV, SerialiseObject(objectDefinition, item)); break; case TObjectState.Delete: request = client.NewDeleteRequest(objectType, item.InstanceID, null); break; default: break; } ApplicationEventLog.Write(LogLevel.Information, string.Concat("SaveObject - Send request ", string.Concat(objectType.Path, "/", item.InstanceID), " client ", client.Address.ToString())); Response response = client.SendRequest(request).WaitForResponse(LWM2MClient.REQUEST_TIMEOUT); if (response == null) { throw new TimeoutException(); } else { BusinessLogicFactory.Clients.UpdateClientActivity(client); if (response.StatusCode == StatusCode.Created) { if (!string.IsNullOrEmpty(response.LocationPath) && (response.LocationPath.StartsWith(request.UriPath))) { int startIndex = request.UriPath.Length + 1; if (startIndex < response.LocationPath.Length) { result = response.LocationPath.Substring(startIndex); } } } else if (response.StatusCode == StatusCode.Changed) { } else if ((response.StatusCode == StatusCode.NotFound) && (state == TObjectState.Delete)) { } else { throw new BadRequestException(); } } } } } } return(result); }