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