Ejemplo n.º 1
0
        /// <summary>
        /// method to caliculate physical size of request object
        /// </summary>
        /// <param name="backendrequest">takes request as input</param>
        /// <returns>returns size of request object</returns>
        public int CalculateRequestSize(BackendRequest backendrequest)
        {
            //Get Caller Method name
            string callerMethodName = string.Empty;

            try
            {
                //Get Caller Method name from CallerInformation class
                callerMethodName = CallerInformation.TrackCallerMethodName();
                //converting object to stream
                using (Stream stream = new MemoryStream())
                {
                    BinaryFormatter formatter = new BinaryFormatter();
                    //converting stream to binary formatter to get size
                    formatter.Serialize(stream, backendrequest);
                    return(Convert.ToInt32(stream.Length));;
                }
            }
            catch (DataAccessException DALexception)
            {
                throw DALexception;
            }
            catch (Exception exception)
            {
                //write exception into application insights
                InsightLogger.Exception(exception.Message + " - Error in BL while caliculating request size", exception, callerMethodName);
                throw new BusinessLogicException();
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// BL method to add request entity into azure table
        /// </summary>
        /// <param name="request">takes request as input</param>
        public void AddUpdateRequest(BackendRequest backendrequest, string UserID, string backendId)
        {
            //Get Caller Method name
            string callerMethodName = string.Empty;

            try
            {
                //Get Caller Method name from CallerInformation class
                callerMethodName = CallerInformation.TrackCallerMethodName();
                RequestUpdateDAL requestupdatedal = new RequestUpdateDAL();
                //get the request to update
                RequsetEntity existingrequest = requestupdatedal.GetRequest(string.Concat(CoreConstants.AzureTables.RequestsPK, UserID), backendrequest.RequestsList.ID);
                //if request exists update otherwise craete new request
                if (existingrequest != null)
                {
                    existingrequest.Created         = backendrequest.RequestsList.Created;
                    existingrequest.LastUpdate      = DateTime.Now;
                    existingrequest.Status          = backendrequest.RequestsList.Status;
                    existingrequest.Title           = backendrequest.RequestsList.Title;
                    existingrequest.UpdateTriggered = false;
                    //calling DAL method to update request entity
                    requestupdatedal.AddUpdateRequest(existingrequest);
                }
                else
                {
                    //generating request entity from input request obj by adding partitionkey and rowkey
                    RequsetEntity requestentity = DataProvider.ResponseObjectMapper <RequsetEntity, Request>(backendrequest.RequestsList);
                    requestentity.PartitionKey = string.Concat(CoreConstants.AzureTables.RequestsPK, UserID);
                    requestentity.RowKey       = backendrequest.RequestsList.ID;
                    //adding service layer requestid to entity
                    requestentity.ServiceLayerReqID = backendrequest.ServiceLayerReqID;
                    requestentity.BackendID         = backendId;
                    requestentity.UpdateTriggered   = false;
                    requestentity.LastUpdate        = DateTime.Now;
                    //add requester deatils to request entity
                    if (backendrequest.RequestsList.Requester != null)
                    {
                        requestentity.RequesterID   = backendrequest.RequestsList.Requester.UserID;
                        requestentity.RequesterName = backendrequest.RequestsList.Requester.Name;
                    }
                    //calling DAL method to add request entity
                    requestupdatedal.AddUpdateRequest(requestentity);
                }
            }
            catch (DataAccessException DALexception)
            {
                throw DALexception;
            }
            catch (Exception exception)
            {
                //write exception into application insights
                InsightLogger.Exception(exception.Message + " - Error in BL while inserting request", exception, callerMethodName);
                throw new BusinessLogicException();
            }
        }
        public async Task <ActionResult> InternalPublishCoursesToSearchAndCompare(string providerCode, [FromBody] BackendRequest request)
        {
            var result = await _searchAndCompareService.SaveCourses(providerCode, request.Email);

            return(Ok(new{ result }));
        }
Ejemplo n.º 4
0
        public Backend(int port = 81)
        {
            db          = new SQLDatabase("channels.db");
            HTTPSockets = new Dictionary <string, HTTPSocket>();

            HTTPSockets.Add("backend", new HTTPSocket("*", port, string.Empty));
            HTTPSockets.Add("website", new HTTPSocket("*", port + 1, string.Empty));
            HTTPSockets.Add("tsproxy", new HTTPSocket("*", port + 2, string.Empty));

            backend = new Network.Backend(ref db, this);
            backend.BackendResponse += (sender, e) =>
            {
                if (e.Context == null)
                {
                    return;
                }

                switch (e.Target)
                {
                case BackendTarget.Playlist:
                    e.Context.Response.StatusCode        = 200;
                    e.Context.Response.StatusDescription = "OK";
                    e.Context.Response.ContentType       = "application/x-mpegURL";
                    e.Context.Response.Headers.Add("Content-Disposition",
                                                   "attachment; filename=playlist.m3u8");
                    break;

                case BackendTarget.Epg:
                    e.Context.Response.StatusCode        = 200;
                    e.Context.Response.StatusDescription = "OK";
                    e.Context.Response.ContentType       = "application/gzip";
                    break;

                case BackendTarget.Channel:
                    break;

                case BackendTarget.TSProxy:
                    e.Context.Response.StatusCode        = 200;
                    e.Context.Response.StatusDescription = "OK";
                    e.Context.Response.ContentType       = "video/mp2t";
                    break;

                case BackendTarget.WebSite:
                case BackendTarget.Unknown:
                default:
                    break;
                }

                Task.Run(() => HTTPSockets["backend"].Send(
                             Encoding.UTF8.GetBytes(e.Response), e.Context)
                         );
            };

            HTTPSockets["tsproxy"].DataReceived += (sender, e) =>
            {
                using (var tsp = new Formats.TSDownloader())
                    tsp.Request(new Uri(e.Parameters["url"]), ref e.Context);
            };

            HTTPSockets["backend"].DataReceived += (sender, e) =>
            {
                switch (e.Target)
                {
                case BackendTarget.Playlist:
                    var evArgs = new BackendRequestEventArgs();
                    evArgs.Context    = e.Context;
                    evArgs.Target     = e.Target;
                    evArgs.Parameters = e.Parameters;

                    BackendRequest?.Invoke(this, evArgs);
                    break;

                case BackendTarget.Epg:
                    using (var fs = new Filesystem(""))
                    {
                        if (fs.Exists("epgdata.xml.gz"))
                        {
                            var data = fs.Read("epgdata.xml.gz").Result;

                            e.Context.Response.ContentType = "application/gzip";
                            e.Context.Response.Headers.Add("Content-Disposition",
                                                           "attachment; filename=epgdata.xml.gz");

                            e.Context.Response.StatusCode        = 200;
                            e.Context.Response.StatusDescription = "OK";

                            Task.Run(() => HTTPSockets["backend"].Send(data, e.Context));
                        }
                        else
                        {
                            e.Context.Response.StatusCode        = 503;
                            e.Context.Response.StatusDescription = "Service Unavailable";

                            Task.Run(() => HTTPSockets["backend"].Send(new byte[0], e.Context));
                        }
                    }

                    break;

                case BackendTarget.WebSite:
                case BackendTarget.Unknown:
                default:
                    e.Context.Response.StatusCode        = 404;
                    e.Context.Response.StatusDescription = "Not Found";
                    Task.Run(() => HTTPSockets["backend"].Send(e.Context.Response.StatusDescription, e.Context));
                    break;
                }
            };

            website = new WebSite(this);
            website.WebSiteResponse += (sender, e) =>
            {
                Task.Run(() => HTTPSockets["website"].Send(Encoding.UTF8.
                                                           GetBytes(e.Response), e.Context));
            };

            HTTPSockets["website"].DataReceived += (sender, e) =>
            {
                if (e.UserAgent.Contains("Kodi"))
                {
                    e.Context.Response.StatusCode        = 403;
                    e.Context.Response.StatusDescription = "Forbidden";

                    Task.Run(() => HTTPSockets["website"].Send(new byte[0], e.Context));

                    return;
                }

                var evArgs = new BackendRequestEventArgs();
                evArgs.Context    = e.Context;
                evArgs.Parameters = e.Parameters;
                evArgs.Target     = e.Target;

                WebSiteRequest?.Invoke(this, evArgs);
            };

            running = true;
            var t = new Thread(HeartBeat);

            t.IsBackground = true;

            t.Start();
        }
 internal async Task <ResponseResult> Internal_Publish_PublishCoursesToSearchAndCompareAsync(string providerCode, BackendRequest request)
 {
     return(await PostObjects <ResponseResult>($"publish/internal/courses/{providerCode}", request));
 }