Ejemplo n.º 1
0
        private async Task OnContext(HttpListenerContext ctx)
        {
            string[] resource_file_list = { "/Statics/Css/default.css", "/Statics/Css/Material+Icons.css", "/Statics/Css/materialize.min.css", "/Statics/Fonts/flUhRq6tzZclQEJ-Vdg-IuiaDsNc.woff2", "/Statics/Js/default.js", "/Statics/Js/materialize.min.js", "/Statics/Js/jquery-3.5.1.min.js", "/Statics/Lang/en.json", "/Statics/Lang/zh.json", "/Statics/Lang/ja.json" };
            await _requestLock.WaitAsync();

            try
            {
                var request  = ctx.Request;
                var response = ctx.Response;

                if (request.HttpMethod == "POST" && request.Url.AbsolutePath == "/submit")
                {
                    await Submit(request, response).ConfigureAwait(false);
                }
                else if (request.HttpMethod == "GET" && Array.IndexOf(resource_file_list, request.Url.AbsolutePath) > -1)
                {
                    // Load resources
                    response.StatusCode = 200;
                    var Ext = Path.GetExtension(request.Url.AbsolutePath);
                    if (Ext == ".html")
                    {
                        response.ContentType = "text/html";
                    }
                    else if (Ext == ".css")
                    {
                        response.ContentType = "text/css";
                    }
                    else if (Ext == ".js")
                    {
                        response.ContentType = "application/javascript";
                    }
                    else if (Ext == ".json")
                    {
                        response.ContentType = "application/json";
                    }
                    else if (Ext == ".woff2")
                    {
                        response.ContentType = "font/woff2";
                    }

                    Console.WriteLine("Trying to get resource: " + "ChatCore.Resources.Web" + request.Url.AbsolutePath.Replace("/", "."));
                    var buffer = new StreamReader(Assembly.GetExecutingAssembly().GetManifestResourceStream("ChatCore.Resources.Web" + request.Url.AbsolutePath.Replace("/", ".")) !);
                    buffer.BaseStream.CopyTo(response.OutputStream);
                }
                else
                {
                    var settingsJson = _settings.GetSettingsAsJson();
                    settingsJson["twitch_oauth_token"] = new JSONString(_authManager.Credentials.Twitch_OAuthToken);
                    settingsJson["twitch_channels"]    = new JSONArray(_authManager.Credentials.Twitch_Channels);

                    var pageBuilder = new StringBuilder(_pageData);
                    pageBuilder.Replace("{libVersion}", ChatCoreInstance.Version.ToString(3));
                    pageBuilder.Replace("var data = {};", $"var data = {settingsJson};");

                    var data = Encoding.UTF8.GetBytes(pageBuilder.ToString());
                    response.ContentType     = "text/html";
                    response.ContentEncoding = Encoding.UTF8;
                    response.ContentLength64 = data.LongLength;
                    await response.OutputStream.WriteAsync(data, 0, data.Length);
                }

                response.Close();
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "Exception occurred during webapp request.");
            }
            finally
            {
                _requestLock.Release();
            }
        }