Exemple #1
0
        /// <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
            }
        }
Exemple #2
0
        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}");
        }
Exemple #4
0
        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));
        }
Exemple #5
0
        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}");
            }
        }