示例#1
0
        public OicHostDevice(OicConfiguration configuration, IServiceProvider services)
        {
            _configuration = configuration;
            _services      = services;

            _resources.Add("/oic/res", _resourceDirectory);
            _discoverableOicResources.Add(OicResourceLink.FromResource(new OicResourceDirectory()));
        }
示例#2
0
        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));
                }
            }
        }