public OicHostDevice(OicConfiguration configuration, IServiceProvider services) { _configuration = configuration; _services = services; _resources.Add("/oic/res", _resourceDirectory); _discoverableOicResources.Add(OicResourceLink.FromResource(new OicResourceDirectory())); }
public void AddDevice(OicDevice oicDevice) { if (!_resources.ContainsKey("/oic/d")) { // TODO: Decouple OicDevice to OicDeviceResource mapping var deviceResource = new OicDeviceResource { Name = oicDevice.Name, SpecVersions = "core.1.1.1", // TODO: Reference this from somewhere (make it a fixed default value?) PlatformId = Guid.NewGuid(), DeviceId = oicDevice.DeviceId, ResourceTypes = oicDevice.DeviceTypes.ToList(), ServerVersion = System.Diagnostics.FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly().Location).FileVersion, }; _resources.Add("/oic/d", deviceResource); _discoverableOicResources.Add(OicResourceLink.FromResource(deviceResource)); } var discoveredResources = oicDevice.GetType() .GetProperties() .Where(p => p.GetCustomAttribute <OicResourceAttribute>() != null) .Select(p => Tuple.Create((IOicResource)p.GetMethod.Invoke(oicDevice, null), p.GetCustomAttribute <OicResourceAttribute>(false))); var deviceResourceDirectory = new OicResourceDirectory { DeviceId = oicDevice.DeviceId, Name = oicDevice.Name, }; _resourceDirectory.Add(deviceResourceDirectory); foreach (var resource in discoveredResources) { _resources.Add(resource.Item1.RelativeUri, resource.Item1); if (resource.Item2.Policies.HasFlag(OicResourcePolicies.Discoverable)) { deviceResourceDirectory.Links.Add(OicResourceLink.FromResource( resource.Item1, resource.Item2.Policies.HasFlag(OicResourcePolicies.Secure) ? new OicResourceLink.LinkPolicies { Policies = LinkPolicyFlags.Discoverable, IsSecure = true } : null)); } } }