/// <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(); } }
/// <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 })); }
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)); }