예제 #1
0
        /// <summary>
        /// Unmarshaller the response from the service to the response class.
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        public override AmazonWebServiceResponse Unmarshall(JsonUnmarshallerContext context)
        {
            UpdateSubscriptionResponse response = new UpdateSubscriptionResponse();


            return(response);
        }
예제 #2
0
        public static UpdateSubscriptionResponse Unmarshall(UnmarshallerContext context)
        {
            UpdateSubscriptionResponse updateSubscriptionResponse = new UpdateSubscriptionResponse();

            updateSubscriptionResponse.HttpResponse = context.HttpResponse;
            updateSubscriptionResponse.RequestId    = context.StringValue("UpdateSubscription.RequestId");
            updateSubscriptionResponse.Code         = context.StringValue("UpdateSubscription.Code");
            updateSubscriptionResponse.Message      = context.StringValue("UpdateSubscription.Message");

            return(updateSubscriptionResponse);
        }
예제 #3
0
        public static int TIME_OUT = 5000;  // ms

        public MainModule()
        {
            // 1. 클라가 필요한 구독들을 요청해옴
            //Post["/subscription"] = parameter =>
            //{
            //    // 파라메터로 요청 데이터들이 옴(어떤 것들이 필요한지)
            //    // 디비에서 찾아서 필요한것들 리턴
            //    return 1212;
            //};

            Post["/update_subscription", true] = async(parameter, cancellation) =>
            {
                WirteStartingLog();
                var request  = UnpackRequest <UpdateSubscriptionRequest>();
                var response = new UpdateSubscriptionResponse()
                {
                    EpisodeInfos = new List <EpisodeInfo>()
                };

                var collection = DataBase.Instance.Contents;
                var query      = MakeFilterForGettingNameAndEpisode(request.Subscriptions);

                var result = await collection.Find(query).ToListAsync().WithTimeout(TIME_OUT);

                if (result != null)
                {
                    response.EpisodeInfos = result.Select(item => item.Info).ToList();
                }

                WriteEndingLog();
                // 넘김
                return(PackResponse(response));
            };

            Post["/search_episode", true] = async(paramter, ct) =>
            {
                WirteStartingLog();
                string text = UnpackRequest <string>();

                var collection = DataBase.Instance.Contents;

                var result = await collection.AsQueryable()
                             .Where(item => item.Info.Name.Contains(text))
                             .ToListAsync()
                             .WithTimeout(TIME_OUT);

                var response = new Response();

                int code = 0;
                code  = (result == null) ? 0x01 : 0x00;
                code |= (result != null && result.Count > 0) ? 0x10 : 0x00;

                switch (code)
                {
                case 0x10:
                    // 성공
                    var sendingDatas = result.Select(item => item.Info).ToList();
                    response = PackResponse(sendingDatas);
                    break;

                case 0x01:
                    response.StatusCode = HttpStatusCode.NoContent;
                    break;

                default:
                    response.StatusCode = HttpStatusCode.NotFound;
                    break;
                }

                WriteEndingLog();
                // Error
                return(response);
            };

            // 서버에 있는 RSS 리스트 전달
            Post["/update_rsslist", true] = async(parameter, cancellation) =>
            {
                WirteStartingLog();

                var collection = DataBase.Instance.RssList;

                Log.WriteLine("Query to DB...");
                var rsslist = await collection.Find(Builders <RssListInfo> .Filter.Empty)
                              .ToListAsync();

                Log.WriteLine("Found '{0}'", rsslist.Count);

                // 클라에 넘겨줄 포맷으로 바꾼다.
                List <string> response = rsslist.Select(info => info.RssAddress).ToList();

                WriteEndingLog();
                return(PackResponse(response));
            };

            // 클라가 갖고 있는 RSS Feed 정보들을 서버로 보내준다.
            Post["/store_feeds", true] = async(parameter, cancellation) =>
            {
                WirteStartingLog();

                string errorMessage = "OK";

                var clientEpisodes = UnpackRequest <List <EpisodeInfo> >();

                var collection = DataBase.Instance.Contents;

                Log.WriteLine("Insert({0}) to DB...", clientEpisodes.Count);

                var episodes = clientEpisodes.Select(info => new ServerEpisodeInfo()
                {
                    Info = info
                });

                // 일단 그냥 때려 넣지만, [데이터 중복문제]가 남아 있다.
                var tokenSource = new CancellationTokenSource();
                var task        = collection.InsertManyAsync(episodes, null, tokenSource.Token);
                if (await Task.WhenAny(task, Task.Delay(TIME_OUT)) != task)
                {
                    // 타임아웃 처리
                    tokenSource.Cancel();
                    errorMessage = "Timeout";
                    Log.Error("{0}...{1}", Request.Path, errorMessage);
                }

                WriteEndingLog();
                return(PackResponse(errorMessage));
            };
        }
예제 #4
0
        public HttpServer()
        {
            // 1. 클라가 필요한 구독들을 요청해옴
            //Post["/subscription"] = parameter =>
            //{
            //    // 파라메터로 요청 데이터들이 옴(어떤 것들이 필요한지)
            //    // 디비에서 찾아서 필요한것들 리턴
            //    return 1212;
            //};

            Post["/update_subscription", true] = async(parameter, cancellation) =>
            {
                var request  = UnpackRequest <UpdateSubscriptionRequest>();
                var response = new UpdateSubscriptionResponse()
                {
                    EpisodeInfos = new List <EpisodeInfo>()
                };

                var collection = DataBase.Instance.Collection;
                var query      = MakeFilterForGettingNameAndEpisode(request.Subscriptions);

                var result = await collection.Find(query).ToListAsync().WithTimeout(5000);

                if (result != null)
                {
                    response.EpisodeInfos = result.Select(item => item.Info).ToList();
                }

                // 넘김
                return(PackResponse(response));
            };

            Post["/search_episode", true] = async(paramter, ct) =>
            {
                string text = UnpackRequest <string>();

                var collection = DataBase.Instance.Collection;

                var result = await collection.AsQueryable()
                             .Where(item => item.Info.Name.Contains(text))
                             .ToListAsync()
                             .WithTimeout(5000);

                var response = new Response();

                int code = 0;
                code  = (result == null) ? 0x01 : 0x00;
                code |= (result != null && result.Count > 0) ? 0x10 : 0x00;

                switch (code)
                {
                case 0x10:
                    // 성공
                    var sendingDatas = result.Select(item => item.Info).ToList();
                    response = PackResponse(sendingDatas);
                    break;

                case 0x01:
                    response.StatusCode = HttpStatusCode.NoContent;
                    break;

                default:
                    response.StatusCode = HttpStatusCode.NotFound;
                    break;
                }

                // Error
                return(response);
            };
        }