Esempio n. 1
0
        /// <name>get</name>
        /// <summary>
        /// Gets meta-information of the current API.
        /// </summary>
        /// <returns cref="ApiInfo">If successful, this method returns a <see cref="ApiInfo"/> resource in the response body.</returns>
        public JObject Get()
        {
            var apiInfo = new ApiInfo
            {
                ApiVersion         = Version.ApiVersion,
                ServerTimestamp    = _timestampRepository.GetCurrentTimestamp(),
                WebSocketServerUrl = ConfigurationManager.AppSettings["WebSocketServerUrl"]
            };

            return(Mapper.Map(apiInfo));
        }
Esempio n. 2
0
        public HttpResponseMessage Get()
        {
            var timestamp = _timestampRepository.GetCurrentTimestamp();

            return(new HttpResponseMessage
            {
                Content = new StringContent("The DeviceHive RESTful API is now running, " +
                                            "please refer to documentation to get the list of available resources." +
                                            "\n\nApi Version: " + Version.ApiVersion +
                                            "\nServer Timestamp: " + timestamp.ToString("yyyy-MM-ddTHH:mm:ss.ffffff")),
            });
        }
        public JObject Get()
        {
            var webSocketEndpoint = DeviceHiveConfiguration.WebSocketEndpoint;
            var apiInfo           = new ApiInfo
            {
                ApiVersion         = Version.ApiVersion,
                ServerTimestamp    = _timestampRepository.GetCurrentTimestamp(),
                WebSocketServerUrl = webSocketEndpoint.Enabled ? webSocketEndpoint.Url : null,
            };

            return(Mapper.Map(apiInfo));
        }
        public async Task <JArray> Get(string deviceGuid, DateTime?timestamp = null, string names = null, int?waitTimeout = null)
        {
            var device = GetDeviceEnsureAccess(deviceGuid);

            var start             = timestamp ?? _timestampRepository.GetCurrentTimestamp();
            var notificationNames = names != null?names.Split(',') : null;

            if (waitTimeout <= 0)
            {
                var filter = new DeviceNotificationFilter {
                    Start = start, IsDateInclusive = false, Notifications = notificationNames
                };
                var notifications = DataContext.DeviceNotification.GetByDevice(device.ID, filter);
                return(new JArray(notifications.Select(n => MapDeviceNotification(n, device))));
            }

            var config    = DeviceHiveConfiguration.RestEndpoint;
            var delayTask = Task.Delay(1000 * Math.Min(config.NotificationPollMaxInterval, waitTimeout ?? config.NotificationPollDefaultInterval));

            using (var waiterHandle = _notificationByDeviceIdWaiter.BeginWait(new object[] { device.ID },
                                                                              notificationNames == null ? null : notificationNames.Cast <object>().ToArray()))
            {
                do
                {
                    var filter = new DeviceNotificationFilter {
                        Start = start, IsDateInclusive = false, Notifications = notificationNames
                    };
                    var notifications = DataContext.DeviceNotification.GetByDevice(device.ID, filter);
                    if (notifications != null && notifications.Any())
                    {
                        return(new JArray(notifications.Select(n => MapDeviceNotification(n, device))));
                    }
                }while (await Task.WhenAny(waiterHandle.Wait(), delayTask) != delayTask);
            }

            return(new JArray());
        }
        public JArray Get(Guid deviceGuid, DateTime?timestamp = null, int?waitTimeout = null)
        {
            var device = DataContext.Device.Get(deviceGuid);

            if (device == null || !IsNetworkAccessible(device.NetworkID))
            {
                ThrowHttpResponse(HttpStatusCode.NotFound, "Device not found!");
            }

            var start = timestamp != null?timestamp.Value.AddTicks(10) : _timestampRepository.GetCurrentTimestamp();

            if (waitTimeout <= 0)
            {
                var notifications = DataContext.DeviceNotification.GetByDevice(device.ID, start, null);
                return(new JArray(notifications.Select(n => Mapper.Map(n))));
            }

            var waitUntil = DateTime.UtcNow.AddSeconds(Math.Min(_maxWaitTimeout, waitTimeout ?? _defaultWaitTimeout));

            while (true)
            {
                using (var waiterHandle = _notificationByDeviceIdWaiter.BeginWait(device.ID))
                {
                    var notifications = DataContext.DeviceNotification.GetByDevice(device.ID, start, null);
                    if (notifications != null && notifications.Any())
                    {
                        return(new JArray(notifications.Select(n => Mapper.Map(n))));
                    }

                    var now = DateTime.UtcNow;
                    if (now >= waitUntil || !waiterHandle.Handle.WaitOne(waitUntil - now))
                    {
                        return(new JArray());
                    }
                }
            }
        }