/// <summary> /// Allows you to request an entity (from the store) and get a callback when load succeeds or fails. /// If the entity is not initially loaded, sends the usual notifications and then listens for updates /// </summary> public static Request <ResolveMultipleResultDTO <DataType> > ResolveAll( IEnumerable <string> keys, HasEntities <DataType> store, Action <Request <ResolveMultipleResultDTO <DataType> > > callback = null) { var promise = new Promise <ResolveMultipleResultDTO <DataType> >((resolve, reject, cancel, attach) => { var all = new JoinRequests(); foreach (var k in keys) { all.Add(new DataRequest(NewResolveRequest(k), store)); } all.Execute(result => { var allResult = result as JoinRequests; using (var resultRequests = ListPool <Request> .Get()) using (var resultItems = ListPool <ResolveResultDTO <DataType> > .Get()) { allResult.GetResults(resultRequests); foreach (var rr in resultRequests) { var key = (rr as DataRequest).loadKey; var reqDTO = (rr as DataRequest).requestDTO; if (rr.hasError) { resultItems.Add( ResolveResultDTO <DataType> .ResolveError( reqDTO, rr.error ) ); continue; } Entity <DataType> entity; if (!store.GetEntity(key, out entity)) { resultItems.Add( ResolveResultDTO <DataType> .ResolveError( reqDTO, "enity not in store after resolve" ) ); continue; } var status = entity.status; resultItems.Add(ResolveResultDTO <DataType> .ResolveSucceeded( reqDTO, entity.id, entity.data, status.maxAgeSecs, status.timestamp )); } resolve(new ResolveMultipleResultDTO <DataType> { entities = resultItems.ToArray() }); } }); }); promise.Execute(callback); return(promise); }
public JoinRequests GetJoinRequests(byte[] result) { return(JoinRequests.ParseFrom(result)); }