コード例 #1
0
        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");
        }
コード例 #2
0
        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));
        }
コード例 #3
0
        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));
        }