/// <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)); }
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()); } } } }