static void CreateSampleImages() { Console.WriteLine("Begin"); var outputDirName = "output"; var enums = (AdDesignTypes.en[])Enum.GetValues(typeof(AdDesignTypes.en)); Directory.CreateDirectory(outputDirName); WriteImageFile($"{outputDirName}/invalid-size-40x40-blue.png", new Size(24, 24), new SKColor(0xFF66d9ff), new SKColor(0xFF212121)); WriteImageFile($"{outputDirName}/invalid-size-40x40-orange.png", new Size(24, 24), new SKColor(0xFFff9933), new SKColor(0xFF212121)); foreach (var it in enums) { if (it == AdDesignTypes.en.None) { continue; } var name = it.ToString(); var size = AdDesignTypes.ToSize(it); var hdSize = AdDesignTypes.ToHDSize(it); WriteImageFile($"{outputDirName}/{name}-{size.Width}x{size.Height}-blue.png", size, new SKColor(0xFF66d9ff), new SKColor(0xFF212121)); WriteImageFile($"{outputDirName}/{name}-{size.Width}x{size.Height}-orange.png", size, new SKColor(0xFFff9933), new SKColor(0xFF212121)); WriteImageFile($"{outputDirName}/{name}-hd-{hdSize.Width}x{hdSize.Height}-blue.png", hdSize, new SKColor(0xFF66d9ff), new SKColor(0xFF212121)); WriteImageFile($"{outputDirName}/{name}-hd-{hdSize.Width}x{hdSize.Height}-orange.png", hdSize, new SKColor(0xFFff9933), new SKColor(0xFF212121)); } Console.WriteLine("Completed"); }
public async Task <IActionResult> Upload([FromForm] AdResourceModels.Upload.Request request) { // Check session validation if (await CheckSessionValidationAndSignOutAsync() == false) { return(APIResponse(ErrorCode.InvalidSession)); } // Check valid parameters if (request == null || request.IsValidParameters() == false) { return(APIResponse(ErrorCode.InvalidParameters)); } // Check validation byte[] contents; SKBitmap bitmap = null; AdDesignTypes.en adDesignType = AdDesignTypes.en.None; try { var contentType = request.File.ContentType.ToLower(); if (SUPPORT_IMAGE_CONTENT_TYPE.Contains(contentType) == false) { return(APIResponse(ErrorCode.NotSupportFormat)); } var stream = request.File.OpenReadStream(); //if (stream.Length > MAX_RESOURCE_SIZE) // return APIResponse(ErrorCode.InvalidResource); contents = new byte[stream.Length]; await stream.ReadAsync(contents, 0, contents.Length); bitmap = SKBitmap.Decode(contents); if (bitmap.Width >= short.MaxValue || bitmap.Height >= short.MaxValue) { return(APIResponse(ErrorCode.InvalidResource)); } adDesignType = AdDesignTypes.ToEnum(new Size(bitmap.Width, bitmap.Height)); if (adDesignType == AdDesignTypes.en.None) { return(APIResponse(ErrorCode.InvalidSize)); } } catch (Exception ex) { Console.WriteLine($"{ex.Message}\n{ex.StackTrace}"); return(APIResponse(ErrorCode.UknownError)); } // Generate Resource Id var adResourceId = IDGenerator.NewAdResourceId; var remotePath = $"aic/resources/{UserId}/{adResourceId}"; // Upload to ftp FtpClient ftp = new FtpClient(WebConfiguration.Instance.FTPHost, WebConfiguration.Instance.FTPId, WebConfiguration.Instance.FTPPassword); if (await ftp.UploadAsync(remotePath, contents) == false) { await ftp.CreateDirectoryAsync($"aic"); await ftp.CreateDirectoryAsync($"aic/resources"); await ftp.CreateDirectoryAsync($"aic/resources/{UserId}"); if (await ftp.UploadAsync(remotePath, contents) == false) { return(APIResponse(ErrorCode.Failed)); } } // Insert to db var insertQuery = new DBQuery_AdResource_Insert(); var item = insertQuery.IN.Item; item.UserId = UserId; item.AdResourceId = adResourceId; item.AdDesignType = adDesignType; item.ContentType = request.File.ContentType; item.Width = (short)bitmap.Width; item.Height = (short)bitmap.Height; if (await DBThread.Instance.ReqQueryAsync(insertQuery) == false) { return(APIResponse(ErrorCode.DatabaseError)); } // Response var response = new AdResourceModels.Upload.Response(); if (await response.FromDBAsync(item.AdResourceId) == false) { return(APIResponse(ErrorCode.DatabaseError)); } return(Success(response)); }
public async Task <IActionResult> AdReady([FromBody] PageAdModels.AdReady.Request request) { if (request == null || request.IsValidParameters() == false) { return(APIResponse(ErrorCode.InvalidParameters)); } // Check Data AdInfo ai = new AdInfo(); if (await ai.AdUnitData.FromDBAsync(request.AdUnitId) == false || await ai.AppData.FromDBAsync(ai.AdUnitData.AppId) == false) { return(APIResponse(ErrorCode.BadRequest)); } if (ai.AdUnitData.AdSystemType != request.AdSystemType) { return(APIResponse(ErrorCode.InvalidParameters)); } var supportedDesignTypes = AdDesignTypes.ToSupported(request.ClientType, request.AdSystemType, request.IsLandscape); bool isFound = false; for (int i = 0; i < 3; ++i) { var adDesignType = supportedDesignTypes[RandomEx.Range(0, supportedDesignTypes.Length)]; if (await ai.AdDesignData.ChoiceFromDBAsync(adDesignType) && await ai.CampaignData.FromDBAsync(ai.AdDesignData.CampaignId) && await ai.AdResourceData.FromDBAsync(ai.AdDesignData.AdResourceId) ) { isFound = true; break; } } if (isFound == false) { return(APIResponse(ErrorCode.NotFound)); } // Insert to db var insertQuery = new DBQuery_AdHistory_Insert(); var ahd = ai.AdHistoryData = insertQuery.IN.Item; ahd.AdHistoryId = IDGenerator.NewAdHistoryId; UserBasicData customerData = new UserBasicData(); if (request.CustomerId != GlobalDefine.INVALID_DBKEY && await customerData.FromDBAsync(request.CustomerId)) { ahd.CustomerId = request.CustomerId; } else { ahd.CustomerId = GlobalDefine.INVALID_DBKEY; } ahd.PublisherId = ai.AdUnitData.UserId; ahd.AppId = ai.AdUnitData.AppId; ahd.AdUnitId = ai.AdUnitData.AdUnitId; ahd.AdvertiserId = ai.CampaignData.UserId; ahd.AdDesignId = ai.AdDesignData.AdDesignId; ahd.CampaignId = ai.CampaignData.CampaignId; ahd.UserAgent = UserAgent; ahd.IPAddress = RemoteIPAddress; ahd.AdDesignType = ai.AdDesignData.AdDesignType; ahd.CampaignType = ai.CampaignData.CampaignType; ahd.Cost = ai.CampaignData.Cost; if (await DBThread.Instance.ReqQueryAsync(insertQuery) == false) { return(APIResponse(ErrorCode.DatabaseError)); } // Response var response = new PageAdModels.AdReady.Response(); response.AdUnitId = request.AdUnitId; response.AdSystemType = ai.AdUnitData.AdSystemType; response.AdDesignType = ai.AdDesignData.AdDesignType; response.ContentType = ai.AdResourceData.ContentType; var resourceUrl = $"{HttpContext.Request.Scheme}://{HttpContext.Request.Host}{Url.Action("AdResource", "PageAd")}"; response.ResourceUrl = resourceUrl; response.Width = ai.AdResourceData.Width; response.Height = ai.AdResourceData.Height; response.AdUrl = ai.AdDesignData.DestinationUrl; response.AdClickUrl = $"{HttpContext.Request.Scheme}://{HttpContext.Request.Host}{Url.Action("AdClick", "PageAd")}"; response.Ai = ai.Encode().EncodeBase64ToUrlSafeBase64(); return(Success(response)); }