/// <summary> /// Get available devices. /// </summary> /// <param name="request"></param> /// <returns></returns> public GXDevicesResponse Post(GXDevicesRequest request) { lock (Db) { IAuthSession s = this.GetSession(false); List <GXAmiDevice> list; //Returns all devices of the user. if (request.UserID != 0) { list = GetDevices(s, Db, request.UserID, 0, 0, 0, request.Removed); } //Returns all devices from the user goup else if (request.UserGroupID != 0) { list = GetDevices(s, Db, 0, request.UserGroupID, 0, 0, request.Removed); } //Returns all devices from the device goup else if (request.DeviceGroupID != 0) { list = GetDevices(s, Db, 0, 0, request.DeviceGroupID, 0, request.Removed); } //Returns device else if (request.DeviceID != 0) { list = GetDevices(s, Db, 0, 0, 0, request.DeviceID, request.Removed); } //Returns all devices that DC can access. else if (request.DataCollectorId != 0) { string query = string.Format("SELECT DISTINCT {0}.* FROM {0} INNER JOIN {1} ON {0}.ID = {1}.DeviceID " + "WHERE (DataCollectorID IS NULL OR DataCollectorID = {2}) AND Removed IS NULL", GuruxAMI.Server.AppHost.GetTableName <GXAmiDevice>(Db), GuruxAMI.Server.AppHost.GetTableName <GXAmiDeviceMedia>(Db), request.DataCollectorId); list = Db.Select <GXAmiDevice>(query); } //Return all devices. else { list = GetDevices(s, Db, 0, 0, 0, 0, request.Removed); } //If devices are find by device profile. if (request.DeviceProfileIDs != null && request.DeviceProfileIDs.Length != 0) { List <ulong> tmp = new List <ulong>(request.DeviceProfileIDs); for (int pos = 0; pos != list.Count; ++pos) { if (tmp.Find(p => p == list[pos].Id) == 0) { list.Remove(list[pos]); --pos; } } } //Remove excluded devices. if (request.Excluded != null && request.Excluded.Length != 0) { List <ulong> ids = new List <ulong>(request.Excluded); var excludeUserGroups = from c in list where !ids.Contains(c.Id) select c; list = excludeUserGroups.ToList(); } //Get devices by range. if (request.Index != 0 || request.Count != 0) { if (request.Count == 0 || request.Index + request.Count > list.Count) { request.Count = list.Count - request.Index; } list.RemoveRange(0, request.Index); var limitUserGroups = list.Take(request.Count); list = limitUserGroups.ToList(); } if (request.Content != DeviceContentType.Main) { foreach (GXAmiDevice it in list) { UpdateContent(Db, it, request.Content); } } return(new GXDevicesResponse(list.ToArray())); } }
/// <summary> /// Get available devices. /// </summary> /// <param name="request"></param> /// <returns></returns> public GXDevicesResponse Post(GXDevicesRequest request) { lock (Db) { IAuthSession s = this.GetSession(false); List<GXAmiDevice> list; //Returns all devices of the user. if (request.UserID != 0) { list = GetDevices(s, Db, request.UserID, 0, 0, 0, request.Removed); } //Returns all devices from the user goup else if (request.UserGroupID != 0) { list = GetDevices(s, Db, 0, request.UserGroupID, 0, 0, request.Removed); } //Returns all devices from the device goup else if (request.DeviceGroupID != 0) { list = GetDevices(s, Db, 0, 0, request.DeviceGroupID, 0, request.Removed); } //Returns device else if (request.DeviceID != 0) { list = GetDevices(s, Db, 0, 0, 0, request.DeviceID, request.Removed); } //Returns all devices that DC can access. else if (request.DataCollectorId != 0) { string query = string.Format("SELECT DISTINCT {0}.* FROM {0} INNER JOIN {1} ON {0}.ID = {1}.DeviceID " + "WHERE (DataCollectorID IS NULL OR DataCollectorID = {2}) AND Removed IS NULL", GuruxAMI.Server.AppHost.GetTableName<GXAmiDevice>(Db), GuruxAMI.Server.AppHost.GetTableName<GXAmiDeviceMedia>(Db), request.DataCollectorId); list = Db.Select<GXAmiDevice>(query); } //Return all devices. else { list = GetDevices(s, Db, 0, 0, 0, 0, request.Removed); } //If devices are find by device profile. if (request.DeviceProfileIDs != null && request.DeviceProfileIDs.Length != 0) { List<ulong> tmp = new List<ulong>(request.DeviceProfileIDs); for (int pos = 0; pos != list.Count; ++pos) { if (tmp.Find(p => p == list[pos].Id) == 0) { list.Remove(list[pos]); --pos; } } } //Remove excluded devices. if (request.Excluded != null && request.Excluded.Length != 0) { List<ulong> ids = new List<ulong>(request.Excluded); var excludeUserGroups = from c in list where !ids.Contains(c.Id) select c; list = excludeUserGroups.ToList(); } //Get devices by range. if (request.Index != 0 || request.Count != 0) { if (request.Count == 0 || request.Index + request.Count > list.Count) { request.Count = list.Count - request.Index; } list.RemoveRange(0, request.Index); var limitUserGroups = list.Take(request.Count); list = limitUserGroups.ToList(); } if (request.Content != DeviceContentType.Main) { foreach (GXAmiDevice it in list) { UpdateContent(Db, it, request.Content); } } return new GXDevicesResponse(list.ToArray()); } }