/// <summary> /// Start a new command of a specific type with a global and/or local buffer on the EV3 brick /// </summary> /// <param name="commandType">The type of the command to start</param> /// <param name="globalSize">The size of the global buffer in bytes (maximum of 1024 bytes)</param> /// <param name="localSize">The size of the local buffer in bytes (maximum of 64 bytes)</param> internal void Initialize(CommandType commandType, ushort globalSize, int localSize) { if (globalSize > 1024) { throw new ArgumentException("Global buffer must be less than 1024 bytes", nameof(globalSize)); } if (localSize > 64) { throw new ArgumentException("Local buffer must be less than 64 bytes", nameof(localSize)); } _stream = new MemoryStream(); _writer = new BinaryWriter(_stream); Response = ResponseManager.CreateResponse(); CommandType = commandType; // 2 bytes (this gets filled in later when the user calls ToBytes()) _writer.Write((ushort)0xffff); // 2 bytes _writer.Write(Response.Sequence); // 1 byte _writer.Write((byte)commandType); if (commandType == CommandType.DirectReply || commandType == CommandType.DirectNoReply) { // 2 bytes (llllllgg gggggggg) _writer.Write((byte)globalSize); // lower bits of globalSize _writer.Write((byte)((localSize << 2) | (globalSize >> 8) & 0x03)); // upper bits of globalSize + localSize } }
public override async Task <string> Handle(HttpRequest request, HttpResponse response) { Log.LogDebug("HandleStream get file"); string file = string.Empty; if (request.Query.ContainsKey(string.Empty)) { file = request.Query[string.Empty][0]; file = HttpUtility.UrlDecode(file); } if (ProgramSettings.Settings.Dlna && !string.IsNullOrEmpty(file)) { try { var fileRequest = await FileRequest.Create(request, file); if (fileRequest.File.Exists && Tools.Tools.CheckAccessPath(fileRequest.File.FullName)) { var data = await File.ReadAllBytesAsync(fileRequest.File.FullName); string source = string.Empty; var items = GetItems(data, ref source); if (!string.IsNullOrEmpty(source)) { return(source); } else { return(ResponseManager.CreateResponse(items)); } } else { Log.LogDebug("File not found: {0}", file); response.StatusCode = (int)HttpStatusCode.NotFound; } } catch (Exception exception) { Log.LogError(exception); response.StatusCode = (int)HttpStatusCode.NotFound; } } else { Log.LogDebug("Incorrect parameter: {0}", file); response.StatusCode = (int)HttpStatusCode.NoContent; } return(null); }
public override async Task <string> Handle(HttpRequest request, HttpResponse response) { string pluginKey = ParsePluginKey(request); if (!string.IsNullOrEmpty(pluginKey)) { var plugin = PluginManager.Instance.GetPlugin(pluginKey); if (plugin != null) { Log.LogDebug("Execute: {0}", plugin.ToString()); try { PlayList playList = null; await Task.Run((() => { var query = request.Query.ConvertToNameValue(); var context = new PluginContext(pluginKey, request, query); playList = plugin.GetPlayList(context); })); if (playList != null) { // var playList = new PlayList(pluginResponse); if (!string.IsNullOrEmpty(playList.Source)) { Log.LogDebug( "Plugin Playlist.source not null! Write to response Playlist.source and ignore other methods. Plugin: {0}", pluginKey); return(playList.Source); } else { return(ResponseManager.CreateResponse(playList)); } } } catch (Exception exception) { Log.LogError(exception); response.StatusCode = (int)HttpStatusCode.BadRequest; return($"Plugin: {pluginKey}"); } } } response.StatusCode = (int)HttpStatusCode.NotFound; return($"Plugin is not defined in request. Plugin: {pluginKey}"); }
public override async Task <string> Handle(HttpRequest request, HttpResponse response) { var items = new List <IItem>(); var task = Task.Run((() => { if ((ProgramSettings.Settings.UserUrls != null) && (ProgramSettings.Settings.UserUrls.Length > 0)) { items.AddRange(from string url in ProgramSettings.Settings.UserUrls select new FileItem() { Title = url.Split('\\').Last().Split('/').Last(), Link = url }); } })); await task; response.ContentType = MimeTypes.Get(PARAM_URLS.Substring(PARAM_URLS.IndexOf('.'))); return(ResponseManager.CreateResponse(items)); }
public ResponseModel <GetUserInfoResponseModel> GetUserInfo([FromQuery] GetUserInfoRequestModel request) { var user = _repository.GetUserById(request.Id); if (user == null) { return(ResponseManager <GetUserInfoResponseModel> .CreateResponse(400, new string[] { "user not found" }, null)); } var response = new GetUserInfoResponseModel(); response.Name = user; var financialService = new FinancialService(); response.Savings = financialService.GetPensionSavingsForUser(request.Id); response.Id = request.Id; return(ResponseManager <GetUserInfoResponseModel> .CreateResponse(200, null, response)); }
public async Task <string> GetFileList(Dictionary <string, string> files, string key, string type) { var items = new List <IItem>(); if (files.Count > 0) { if (files.Count > 1) { string stream = string.Format("{0}/ace/getstream?{1}={2}", AceStreamEngine.GetServer, type, key); return(await HTTPUtility.GetRequestAsync(stream)); } else { string stream = string.Format("{0}/ace/getstream?{1}={2}", AceStreamEngine.GetServer, type, key); string name = Path.GetFileName(files.First().Value); var item = new FileItem() { Title = Path.GetFileName(name), ImageLink = "http://obovse.ru/ForkPlayer2.5/img/file.png", Link = stream }; items.Add(item); stream = string.Format("{0}/ace/manifest.m3u8?{1}={2}", AceStreamEngine.GetServer, type, key); item = new FileItem() { Title = "(hls) " + Path.GetFileName(name), ImageLink = "http://obovse.ru/ForkPlayer2.5/img/file.png", Link = stream }; items.Add(item); } } return(ResponseManager.CreateResponse(items)); }
public override async Task <string> Handle(HttpRequest request, HttpResponse response) { var items = new List <IItem>(); await Task.Run((() => { if (ProgramSettings.Settings.CheckUpdate) { if (UpdateController.IsUpdateAvaiable("RemoteFork")) { items.Add( new FileItem() { Title = $"Доступна новая версия: {UpdateController.GetUpdater("RemoteFork").GetLatestVersionNumber(false).Result}", Link = "http://newversion.m3u" } ); } } if (ProgramSettings.Settings.Dlna) { if (ProgramSettings.Settings.DlnaFilterType == FilterMode.INCLUSION) { if (ProgramSettings.Settings.DlnaDirectories != null) { foreach (string directory in ProgramSettings.Settings.DlnaDirectories) { Console.WriteLine(directory); if (FileManager.DirectoryExists(directory)) { Console.WriteLine(true); items.Add(DlnaDirectoryRequestHandler.CreateDirectoryItem(request, directory)); Log.LogDebug($"Filtering directory: {directory}"); } } } } else { var drives = FileManager.GetDrives(); foreach (var drive in drives.Where(i => Tools.Tools.CheckAccessPath(i.Name))) { if (drive.IsReady) { string mainText = $"{drive.Name} ({Tools.Tools.FSize(drive.AvailableFreeSpace)} свободно из {Tools.Tools.FSize(drive.TotalSize)})"; string subText = $"<br>Метка диска: {drive.VolumeLabel}<br>Тип носителя: {drive.DriveType}"; items.Add(new DirectoryItem() { Title = mainText + subText, Link = DlnaDirectoryRequestHandler.CreateDriveItem(request, drive.Name) }); Log.LogDebug($"Drive: {mainText}{subText}"); } } } } if ((ProgramSettings.Settings.UserUrls != null) && (ProgramSettings.Settings.UserUrls.Length > 0)) { items.Add( new DirectoryItem() { Title = "Пользовательские ссылки", Link = CreateUrl(request, UserUrlsRequestHandler.URL_PATH, new NameValueCollection() { { string.Empty, UserUrlsRequestHandler.PARAM_URLS } }) } ); Log.LogDebug("User urls: {0}", ProgramSettings.Settings.UserUrls.Length); } foreach (var plugin in PluginManager.Instance.GetPlugins()) { var item = new DirectoryItem() { Title = plugin.Value.Name, Link = PluginRequestHandler.CreatePluginUrl(request, plugin.Key) }; if (ProgramSettings.Settings.PluginIcons) { item.ImageLink = plugin.Value.Attribute.ImageLink; } items.Add(item); Log.LogDebug("Plugin: {0}", plugin.Value.ToString()); } })); PlayList playList = null; if (ProgramSettings.Settings.StartPageModernStyle) { playList = new RootPlayList(); } else { playList = new PlayList(); } playList.Items = items.ToArray(); return(ResponseManager.CreateResponse(playList)); }
public override async Task <string> Handle(HttpRequest request, HttpResponse response) { string rootDirectory = string.Empty; if (request.Query.ContainsKey(string.Empty)) { rootDirectory = request.Query[string.Empty].FirstOrDefault(s => s.EndsWith(".xml")); } if (ProgramSettings.Settings.Dlna && !string.IsNullOrEmpty(rootDirectory)) { rootDirectory = new Uri(rootDirectory.Remove(rootDirectory.IndexOf(".xml", StringComparison.Ordinal))).LocalPath; var directoriesInfo = FileManager.GetDirectories(rootDirectory); var items = new List <IItem>(); await Task.Run((() => { foreach (var directory in directoriesInfo.Where(d => Tools.Tools.CheckAccessPath(d.Key))) { items.Add(CreateDirectoryItem(request, directory.Key, directory.Value)); Log.LogDebug("Directory: {0}", directory); } var filesInfo = FileManager.GetFiles(rootDirectory); foreach (var file in filesInfo.Where(f => Tools.Tools.CheckAccessPath(f.Key))) { bool torrent = Path.GetExtension(file.Key) == ".torrent"; if (torrent) { items.Add( new DirectoryItem() { Title = $"{file.Value} ({Tools.Tools.FSize(new FileInfo(file.Key).Length)})", Link = CreateUrl(request, torrent ? DlnaTorrentRequestHandler.URL_PATH : DlnaFileRequestHandler.URL_PATH, new NameValueCollection() { { string.Empty, HttpUtility.UrlEncode(file.Key) } }) } ); } else { items.Add( new FileItem() { Title = $"{file.Value} ({Tools.Tools.FSize(new FileInfo(file.Key).Length)})", Link = CreateUrl(request, torrent ? DlnaTorrentRequestHandler.URL_PATH : DlnaFileRequestHandler.URL_PATH, new NameValueCollection() { { string.Empty, HttpUtility.UrlEncode(file.Key) } }), } ); } Log.LogDebug("File: {0}", file); } })); return(ResponseManager.CreateResponse(items)); } else { Log.LogDebug("Directory Not Found: {0}", rootDirectory); response.StatusCode = (int)HttpStatusCode.NotFound; return($"Directory Not Found: {rootDirectory}"); } }